ARTS 2.5.4 (git: 31ce4f0e)
ppath.cc File Reference

Functions releated to calculation of propagation paths. More...

#include "ppath.h"
#include <cmath>
#include <stdexcept>
#include "agenda_class.h"
#include "array.h"
#include "arts_conversions.h"
#include "arts_omp.h"
#include "auto_md.h"
#include "check_input.h"
#include "geodetic.h"
#include "logic.h"
#include "math_funcs.h"
#include "messages.h"
#include "mystring.h"
#include "poly_roots.h"
#include "refraction.h"
#include "rte.h"
#include "special_interp.h"

Go to the source code of this file.

Functions

Numeric geometrical_ppc (const Numeric &r, const Numeric &za)
 Calculates the propagation path constant for pure geometrical calculations. More...
 
Numeric geompath_za_at_r (const Numeric &ppc, const Numeric &a_za, const Numeric &r)
 Calculates the zenith angle for a given radius along a geometrical propagation path. More...
 
Numeric geompath_r_at_za (const Numeric &ppc, const Numeric &za)
 Calculates the zenith angle for a given radius along a geometrical propagation path. More...
 
Numeric geompath_lat_at_za (const Numeric &za0, const Numeric &lat0, const Numeric &za)
 Calculates the latitude for a given zenith angle along a geometrical propagation path. More...
 
Numeric geompath_l_at_r (const Numeric &ppc, const Numeric &r)
 Calculates the length from the tangent point for the given radius. More...
 
Numeric geompath_r_at_l (const Numeric &ppc, const Numeric &l)
 Calculates the radius for a distance from the tangent point. More...
 
Numeric geompath_r_at_lat (const Numeric &ppc, const Numeric &lat0, const Numeric &za0, const Numeric &lat)
 Calculates the radius for a given latitude. More...
 
void geompath_from_r1_to_r2 (Vector &r, Vector &lat, Vector &za, Numeric &lstep, const Numeric &ppc, const Numeric &r1, const Numeric &lat1, const Numeric &za1, const Numeric &r2, const bool &tanpoint, const Numeric &lmax)
 Determines radii, latitudes and zenith angles between two points of a propagation path. More...
 
void cart2zaaa (Numeric &za, Numeric &aa, const Numeric &dx, const Numeric &dy, const Numeric &dz)
 Converts a cartesian directional vector to zenith and azimuth. More...
 
void zaaa2cart (Numeric &dx, Numeric &dy, Numeric &dz, const Numeric &za, const Numeric &aa)
 Converts zenith and azimuth angles to a cartesian unit vector. More...
 
void enu2zaaa (Numeric &za, Numeric &aa, const Numeric &de, const Numeric &dn, const Numeric &du)
 Converts ENU unit vector vector to zenith and azimuth. More...
 
void zaaa2enu (Numeric &de, Numeric &dn, Numeric &du, const Numeric &za, const Numeric &aa)
 Converts zenith and azimuth angles to ENU unit vector. More...
 
void rotationmat3D (Matrix &R, ConstVectorView vrot, const Numeric &a)
 Creates a 3D rotation matrix. More...
 
void add_za_aa (Numeric &za, Numeric &aa, const Numeric &za0, const Numeric &aa0, const Numeric &dza, const Numeric &daa)
 Adds up zenith and azimuth angles. More...
 
void diff_za_aa (Numeric &dza, Numeric &daa, const Numeric &za0, const Numeric &aa0, const Numeric &za, const Numeric &aa)
 Takes the difference of zenith and azimuth angles. More...
 
Numeric refraction_ppc (const Numeric &r, const Numeric &za, const Numeric &refr_index_air)
 Calculates the propagation path constant for cases with refraction. More...
 
void resolve_lon (Numeric &lon, const Numeric &lon5, const Numeric &lon6)
 Resolves which longitude angle that shall be used. More...
 
void find_tanpoint (Index &it, const Ppath &ppath)
 Identifies the tangent point of a propagation path. More...
 
Index first_pos_before_altitude (const Ppath &p, const Numeric &alt)
 Determines ppath position just below an altitude. More...
 
void error_if_limb_ppath (const Ppath &ppath)
 Throws an error if ppath altitudes not are strictly increasing or decreasing. More...
 
Numeric rsurf_at_lat (const Numeric &lat1, const Numeric &lat3, const Numeric &r1, const Numeric &r3, const Numeric &lat)
 Determines the radius of a pressure level or the surface given the radius at the corners of a 2D grid cell. More...
 
void plevel_slope_2d (Numeric &c1, ConstVectorView lat_grid, ConstVectorView refellipsoid, ConstVectorView z_surf, const GridPos &gp, const Numeric &za)
 Calculates the radial slope of the surface or a pressure level for 2D. More...
 
void plevel_slope_2d (Numeric &c1, const Numeric &lat1, const Numeric &lat2, const Numeric &r1, const Numeric &r2)
 Calculates the radial slope of the surface or a pressure level for 2D. More...
 
Numeric plevel_angletilt (const Numeric &r, const Numeric &c1)
 Calculates the angular tilt of the surface or a pressure level. More...
 
bool is_los_downwards (const Numeric &za, const Numeric &tilt)
 Determines if a line-of-sight is downwards compared to the angular tilt of the surface or a pressure level. More...
 
void r_crossing_2d (Numeric &lat, Numeric &l, const Numeric &r_hit, const Numeric &r_start, const Numeric &lat_start, const Numeric &za_start, const Numeric &ppc)
 Calculates where a 2D LOS crosses the specified radius. More...
 
Numeric rslope_crossing2d (const Numeric &rp, const Numeric &za, const Numeric &r0, Numeric c1)
 Calculates the angular distance to a crossing with a level having a radial slope. More...
 
void plevel_crossing_2d (Numeric &r, Numeric &lat, Numeric &l, const Numeric &r_start0, const Numeric &lat_start, const Numeric &za_start, const Numeric &ppc, const Numeric &lat1, const Numeric &lat3, const Numeric &r1, const Numeric &r3, const bool &above)
 Handles the crossing with a geometric ppaths step and a atmospheric grid box level for 2D. More...
 
Numeric rsurf_at_latlon (const Numeric &lat1, const Numeric &lat3, const Numeric &lon5, const Numeric &lon6, const Numeric &r15, const Numeric &r35, const Numeric &r36, const Numeric &r16, const Numeric &lat, const Numeric &lon)
 Determines the radius of a pressure level or the surface given the radius at the corners of a 3D grid cell. More...
 
void plevel_slope_3d (Numeric &c1, Numeric &c2, const Numeric &lat1, const Numeric &lat3, const Numeric &lon5, const Numeric &lon6, const Numeric &r15, const Numeric &r35, const Numeric &r36, const Numeric &r16, const Numeric &lat, const Numeric &lon, const Numeric &aa)
 
void plevel_slope_3d (Numeric &c1, Numeric &c2, ConstVectorView lat_grid, ConstVectorView lon_grid, ConstVectorView refellipsoid, ConstMatrixView z_surf, const GridPos &gp_lat, const GridPos &gp_lon, const Numeric &aa)
 Calculates the radial slope of the surface or a pressure level for 3D. More...
 
Numeric rslope_crossing3d (const Numeric &rp, const Numeric &za, const Numeric &r0, Numeric c1, Numeric c2)
 3D version of rslope_crossing2d. More...
 
void r_crossing_3d (Numeric &lat, Numeric &lon, Numeric &l, const Numeric &r_hit, const Numeric &r_start, const Numeric &lat_start, const Numeric &lon_start, const Numeric &za_start, const Numeric &ppc, const Numeric &x, const Numeric &y, const Numeric &z, const Numeric &dx, const Numeric &dy, const Numeric &dz)
 Calculates where a 3D LOS crosses the specified radius. More...
 
void ppath_init_structure (Ppath &ppath, const Index &atmosphere_dim, const Index &np)
 Initiates a Ppath structure to hold the given number of points. More...
 
void ppath_set_background (Ppath &ppath, const Index &case_nr)
 Sets the background field of a Ppath structure. More...
 
Index ppath_what_background (const Ppath &ppath)
 Returns the case number for the radiative background. More...
 
void ppath_copy (Ppath &ppath1, const Ppath &ppath2, const Index &ncopy)
 Copy the content in ppath2 to ppath1. More...
 
void ppath_append (Ppath &ppath1, const Ppath &ppath2)
 Combines two Ppath structures. More...
 
void ppath_start_1d (Numeric &r_start, Numeric &lat_start, Numeric &za_start, Index &ip, const Ppath &ppath)
 Internal help function for 1D path calculations. More...
 
void ppath_end_1d (Ppath &ppath, ConstVectorView r_v, ConstVectorView lat_v, ConstVectorView za_v, ConstVectorView lstep, ConstVectorView n_v, ConstVectorView ng_v, ConstVectorView z_field, ConstVectorView refellipsoid, const Index &ip, const Index &endface, const Numeric &ppc)
 Internal help function for 1D path calculations. More...
 
void ppath_start_2d (Numeric &r_start, Numeric &lat_start, Numeric &za_start, Index &ip, Index &ilat, Numeric &lat1, Numeric &lat3, Numeric &r1a, Numeric &r3a, Numeric &r3b, Numeric &r1b, Numeric &rsurface1, Numeric &rsurface3, Ppath &ppath, ConstVectorView lat_grid, ConstMatrixView z_field, ConstVectorView refellipsoid, ConstVectorView z_surface)
 Internal help function for 2D path calculations. More...
 
void ppath_end_2d (Ppath &ppath, ConstVectorView r_v, ConstVectorView lat_v, ConstVectorView za_v, ConstVectorView lstep, ConstVectorView n_v, ConstVectorView ng_v, ConstVectorView lat_grid, ConstMatrixView z_field, ConstVectorView refellipsoid, const Index &ip, const Index &ilat, const Index &endface, const Numeric &ppc)
 Internal help function for 2D path calculations. More...
 
void ppath_start_3d (Numeric &r_start, Numeric &lat_start, Numeric &lon_start, Numeric &za_start, Numeric &aa_start, Index &ip, Index &ilat, Index &ilon, Numeric &lat1, Numeric &lat3, Numeric &lon5, Numeric &lon6, Numeric &r15a, Numeric &r35a, Numeric &r36a, Numeric &r16a, Numeric &r15b, Numeric &r35b, Numeric &r36b, Numeric &r16b, Numeric &rsurface15, Numeric &rsurface35, Numeric &rsurface36, Numeric &rsurface16, Ppath &ppath, ConstVectorView lat_grid, ConstVectorView lon_grid, ConstTensor3View z_field, ConstVectorView refellipsoid, ConstMatrixView z_surface)
 Internal help function for 3D path calculations. More...
 
void ppath_end_3d (Ppath &ppath, ConstVectorView r_v, ConstVectorView lat_v, ConstVectorView lon_v, ConstVectorView za_v, ConstVectorView aa_v, ConstVectorView lstep, ConstVectorView n_v, ConstVectorView ng_v, ConstVectorView lat_grid, ConstVectorView lon_grid, ConstTensor3View z_field, ConstVectorView refellipsoid, const Index &ip, const Index &ilat, const Index &ilon, const Index &endface, const Numeric &ppc)
 Internal help function for 3D path calculations. More...
 
void do_gridrange_1d (Vector &r_v, Vector &lat_v, Vector &za_v, Numeric &lstep, Index &endface, const Numeric &r_start0, const Numeric &lat_start, const Numeric &za_start, const Numeric &ppc, const Numeric &lmax, const Numeric &ra, const Numeric &rb, const Numeric &rsurface)
 Calculates the geometrical path through a 1D grid range. More...
 
void ppath_step_geom_1d (Ppath &ppath, ConstVectorView z_field, ConstVectorView refellipsoid, const Numeric &z_surface, const Numeric &lmax)
 Calculates 1D geometrical propagation path steps. More...
 
void do_gridcell_2d_byltest (Vector &r_v, Vector &lat_v, Vector &za_v, Numeric &lstep, Index &endface, const Numeric &r_start0, const Numeric &lat_start0, const Numeric &za_start, const Numeric &l_start, const Index &icall, const Numeric &ppc, const Numeric &lmax, const Numeric &lat1, const Numeric &lat3, const Numeric &r1a, const Numeric &r3a, const Numeric &r3b, const Numeric &r1b, const Numeric &rsurface1, const Numeric &rsurface3)
 Works as do_gridcell_3d_byltest, but downscaled to 2D. More...
 
void ppath_step_geom_2d (Ppath &ppath, ConstVectorView lat_grid, ConstMatrixView z_field, ConstVectorView refellipsoid, ConstVectorView z_surface, const Numeric &lmax)
 Calculates 2D geometrical propagation path steps. More...
 
void do_gridcell_3d_byltest (Vector &r_v, Vector &lat_v, Vector &lon_v, Vector &za_v, Vector &aa_v, Numeric &lstep, Index &endface, const Numeric &r_start0, const Numeric &lat_start0, const Numeric &lon_start0, const Numeric &za_start, const Numeric &aa_start, const Numeric &l_start, const Index &icall, const Numeric &ppc, const Numeric &lmax, const Numeric &lat1, const Numeric &lat3, const Numeric &lon5, const Numeric &lon6, const Numeric &r15a, const Numeric &r35a, const Numeric &r36a, const Numeric &r16a, const Numeric &r15b, const Numeric &r35b, const Numeric &r36b, const Numeric &r16b, const Numeric &rsurface15, const Numeric &rsurface35, const Numeric &rsurface36, const Numeric &rsurface16)
 See ATD for a description of the algorithm. More...
 
void ppath_step_geom_3d (Ppath &ppath, ConstVectorView lat_grid, ConstVectorView lon_grid, ConstTensor3View z_field, ConstVectorView refellipsoid, ConstMatrixView z_surface, const Numeric &lmax)
 Calculates 3D geometrical propagation path steps. More...
 
void raytrace_1d_linear_basic (Workspace &ws, Array< Numeric > &r_array, Array< Numeric > &lat_array, Array< Numeric > &za_array, Array< Numeric > &l_array, Array< Numeric > &n_array, Array< Numeric > &ng_array, Index &endface, ConstVectorView p_grid, ConstVectorView refellipsoid, ConstTensor3View z_field, ConstTensor3View t_field, ConstTensor4View vmr_field, ConstVectorView f_grid, const Numeric &lmax, const Agenda &refr_index_air_agenda, const Numeric &lraytrace, const Numeric &rsurface, const Numeric &r1, const Numeric &r3, Numeric r, Numeric lat, Numeric za)
 Performs ray tracing for 1D with linear steps. More...
 
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)
 Calculates 1D propagation path steps including effects of refraction. More...
 
void raytrace_2d_linear_basic (Workspace &ws, Array< Numeric > &r_array, Array< Numeric > &lat_array, Array< Numeric > &za_array, Array< Numeric > &l_array, Array< Numeric > &n_array, Array< Numeric > &ng_array, Index &endface, ConstVectorView p_grid, ConstVectorView lat_grid, ConstVectorView refellipsoid, ConstTensor3View z_field, ConstTensor3View t_field, ConstTensor4View vmr_field, ConstVectorView f_grid, const Numeric &lmax, const Agenda &refr_index_air_agenda, const Numeric &lraytrace, const Numeric &lat1, const Numeric &lat3, const Numeric &rsurface1, const Numeric &rsurface3, const Numeric &r1a, const Numeric &r3a, const Numeric &r3b, const Numeric &r1b, Numeric r, Numeric lat, Numeric za)
 Performs ray tracing for 2D with linear steps. More...
 
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)
 Calculates 2D propagation path steps, with refraction, using a simple and fast ray tracing scheme. More...
 
void raytrace_3d_linear_basic (Workspace &ws, Array< Numeric > &r_array, Array< Numeric > &lat_array, Array< Numeric > &lon_array, Array< Numeric > &za_array, Array< Numeric > &aa_array, Array< Numeric > &l_array, Array< Numeric > &n_array, Array< Numeric > &ng_array, Index &endface, ConstVectorView refellipsoid, ConstVectorView p_grid, ConstVectorView lat_grid, ConstVectorView lon_grid, ConstTensor3View z_field, ConstTensor3View t_field, ConstTensor4View vmr_field, ConstVectorView f_grid, const Numeric &lmax, const Agenda &refr_index_air_agenda, const Numeric &lraytrace, const Numeric &lat1, const Numeric &lat3, const Numeric &lon5, const Numeric &lon6, const Numeric &rsurface15, const Numeric &rsurface35, const Numeric &rsurface36, const Numeric &rsurface16, const Numeric &r15a, const Numeric &r35a, const Numeric &r36a, const Numeric &r16a, const Numeric &r15b, const Numeric &r35b, const Numeric &r36b, const Numeric &r16b, Numeric r, Numeric lat, Numeric lon, Numeric za, Numeric aa)
 Performs ray tracing for 3D with linear steps. More...
 
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)
 Calculates 3D propagation path steps, with refraction, using a simple and fast ray tracing scheme. More...
 
void ppath_start_stepping (Ppath &ppath, const Index &atmosphere_dim, ConstVectorView p_grid, ConstVectorView lat_grid, ConstVectorView lon_grid, ConstTensor3View z_field, ConstVectorView refellipsoid, ConstMatrixView z_surface, const Index &cloudbox_on, const ArrayOfIndex &cloudbox_limits, const bool &ppath_inside_cloudbox_do, ConstVectorView rte_pos, ConstVectorView rte_los, const Verbosity &verbosity)
 Initiates a Ppath structure for calculation of a path with ppath_step. More...
 
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 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_lmax, const Numeric &ppath_lraytrace, const bool &ppath_inside_cloudbox_do, const Verbosity &verbosity)
 This is the core for the WSM ppathStepByStep. More...
 

Variables

constexpr Numeric DEG2RAD =Conversion::deg2rad(1)
 
constexpr Numeric RAD2DEG =Conversion::rad2deg(1)
 
const Numeric RTOL = 1e-3
 
const Numeric LACC = 1e-5
 
const Numeric R_NOT_FOUND = -1
 
const Numeric L_NOT_FOUND = 99e99
 
const Numeric LAT_NOT_FOUND = 99e99
 
const Numeric LON_NOT_FOUND = 99e99
 

Detailed Description

Functions releated to calculation of propagation paths.

Author
Patrick Eriksson patri.nosp@m.ck.e.nosp@m.rikss.nosp@m.on@c.nosp@m.halme.nosp@m.rs.s.nosp@m.e
Date
2002-05-02

Functions to determine propagation paths for different atmospheric dimensionalities, with and without refraction.

The term propagation path is here shortened to ppath.

Definition in file ppath.cc.

Function Documentation

◆ add_za_aa()

void add_za_aa ( Numeric za,
Numeric aa,
const Numeric za0,
const Numeric aa0,
const Numeric dza,
const Numeric daa 
)

Adds up zenith and azimuth angles.

Adds (dza,daa) to (za0,aa0), assuming that a unit changes in za and aa are equal where (dza,daa)=(0,0).

Parameters
[out]zaEnd zenith angle
[out]aaEnd azimuth angle
[in]za0Start zenith angle
[in]aa0Start azimuth angle
[in]dzaChange in zenith angle
[in]daaChange in azimuth angle
Author
Patrick Eriksson
Date
2018-12-19

Definition at line 392 of file ppath.cc.

References cart2zaaa(), mult(), Constant::R, rotationmat3D(), u, and zaaa2cart().

Referenced by AddZaAa(), iyb_calc_body(), and Test().

◆ cart2zaaa()

void cart2zaaa ( Numeric za,
Numeric aa,
const Numeric dx,
const Numeric dy,
const Numeric dz 
)

Converts a cartesian directional vector to zenith and azimuth.

This function and the sister function cart2zaaa handle transformation of line-of-sights. This in contrast to the sph/poslos functions that handles positions, or combinations of positions and line-of-sight.

The cartesian coordinate system used for these two functions can be defined as z : za = 0 x : za=90, aa=0 y : za=90, aa=90

Parameters
[out]zaLOS zenith angle at observation position.
[out]aaLOS azimuth angle at observation position.
[in]dxx-part of LOS unit vector.
[in]dyy-part of LOS unit vector.
[in]dzz-part of LOS unit vector.
Author
Patrick Eriksson
Date
2009-10-02

Definition at line 300 of file ppath.cc.

References ARTS_ASSERT, dx, RAD2DEG, and sqrt().

Referenced by add_za_aa(), adjust_los(), diff_za_aa(), and specular_losCalc().

◆ diff_za_aa()

void diff_za_aa ( Numeric dza,
Numeric daa,
const Numeric za0,
const Numeric aa0,
const Numeric za,
const Numeric aa 
)

Takes the difference of zenith and azimuth angles.

Takes the difference between a set of angles (za,aa) and a reference direction (za0,aa0). That is, this function is the "inverse" of add_za_aa.

Parameters
[out]dzaChange in zenith angle
[out]daaChange in azimuth angle
[in]za0Zenith angle of reference direction
[in]aa0Azimuth angle of reference direction
[in]zaZenith angle of second direction
[in]aaAzimuth angle of second direction
Author
Patrick Eriksson
Date
2018-12-19

Definition at line 430 of file ppath.cc.

References ARTS_ASSERT, cart2zaaa(), mult(), Constant::R, rotationmat3D(), u, and zaaa2cart().

Referenced by DiffZaAa(), and Test().

◆ do_gridcell_2d_byltest()

void do_gridcell_2d_byltest ( Vector r_v,
Vector lat_v,
Vector za_v,
Numeric lstep,
Index endface,
const Numeric r_start0,
const Numeric lat_start0,
const Numeric za_start,
const Numeric l_start,
const Index icall,
const Numeric ppc,
const Numeric lmax,
const Numeric lat1,
const Numeric lat3,
const Numeric r1a,
const Numeric r3a,
const Numeric r3b,
const Numeric r1b,
const Numeric rsurface1,
const Numeric rsurface3 
)

Works as do_gridcell_3d_byltest, but downscaled to 2D.

Author
Patrick Eriksson
Date
2013-08-16

Definition at line 2421 of file ppath.cc.

References abs, ANGTOL, ARTS_ASSERT, cart2pol(), cart2poslos(), do_gridcell_2d_byltest(), dx, Interpolation::l(), LACC, max, poslos2cart(), Vector::resize(), rsurf_at_lat(), and RTOL.

Referenced by do_gridcell_2d_byltest(), ppath_step_geom_2d(), and raytrace_2d_linear_basic().

◆ do_gridcell_3d_byltest()

void do_gridcell_3d_byltest ( Vector r_v,
Vector lat_v,
Vector lon_v,
Vector za_v,
Vector aa_v,
Numeric lstep,
Index endface,
const Numeric r_start0,
const Numeric lat_start0,
const Numeric lon_start0,
const Numeric za_start,
const Numeric aa_start,
const Numeric l_start,
const Index icall,
const Numeric ppc,
const Numeric lmax,
const Numeric lat1,
const Numeric lat3,
const Numeric lon5,
const Numeric lon6,
const Numeric r15a,
const Numeric r35a,
const Numeric r36a,
const Numeric r16a,
const Numeric r15b,
const Numeric r35b,
const Numeric r36b,
const Numeric r16b,
const Numeric rsurface15,
const Numeric rsurface35,
const Numeric rsurface36,
const Numeric rsurface16 
)

See ATD for a description of the algorithm.

Author
Patrick Eriksson
Date
2002-11-28

Definition at line 2810 of file ppath.cc.

References abs, ANGTOL, ARTS_ASSERT, cart2poslos(), cart2sph(), DEG2RAD, do_gridcell_3d_byltest(), dx, Interpolation::l(), LACC, max, POLELAT, poslos2cart(), Vector::resize(), resolve_lon(), rsurf_at_latlon(), and RTOL.

Referenced by do_gridcell_3d_byltest(), ppath_step_geom_3d(), and raytrace_3d_linear_basic().

◆ do_gridrange_1d()

void do_gridrange_1d ( Vector r_v,
Vector lat_v,
Vector za_v,
Numeric lstep,
Index endface,
const Numeric r_start0,
const Numeric lat_start,
const Numeric za_start,
const Numeric ppc,
const Numeric lmax,
const Numeric ra,
const Numeric rb,
const Numeric rsurface 
)

Calculates the geometrical path through a 1D grid range.

This function works as do_gridcell_2d, but is valid for 1D cases.

The coding of variables and end face is as for do_gridcell_2d, with the exception that end faces 2 and 4 do not exist here.

Parameters
[out]r_vVector with radius of found path points.
[out]lat_vVector with latitude of found path points.
[out]za_vVector with LOS zenith angle at found path points.
[out]lstepVector with length along the path between points.
[out]endfaceNumber coding for exit face.
[in]r_start0Radius of start point.
[in]lat_startLatitude of start point.
[in]za_startLOS zenith angle at start point.
[in]ppcPropagation path constant.
[in]lmaxMaximum allowed length along the path. -1 = no limit.
[in]raRadius of lower pressure level.
[in]rbRadius of upper pressure level (rb > ra);
[in]rsurfaceRadius for the surface.
Author
Patrick Eriksson
Date
2002-12-02

Definition at line 2282 of file ppath.cc.

References ARTS_ASSERT, geompath_from_r1_to_r2(), and RTOL.

Referenced by ppath_step_geom_1d(), and raytrace_1d_linear_basic().

◆ enu2zaaa()

void enu2zaaa ( Numeric za,
Numeric aa,
const Numeric de,
const Numeric dn,
const Numeric du 
)

Converts ENU unit vector vector to zenith and azimuth.

This function and the sister function enu2zaaa handles transformation of line-of-sights, from and to ENU (east-north-up). The ENU vector is normalised to have length 1.

Parameters
[out]zaLOS zenith angle at observation position.
[out]aaLOS azimuth angle at observation position.
[in]dee-part of LOS unit vector.
[in]dnn-part of LOS unit vector.
[in]duu-part of LOS unit vector.
Author
Patrick Eriksson
Date
2020-09-17

Definition at line 327 of file ppath.cc.

References RAD2DEG.

Referenced by cart2geodeticposlos().

◆ error_if_limb_ppath()

void error_if_limb_ppath ( const Ppath ppath)

Throws an error if ppath altitudes not are strictly increasing or decreasing.

Parameters
[in]ppathPropagation path structure.
Author
Patrick Eriksson
Date
2018-03-07

Definition at line 541 of file ppath.cc.

References ARTS_USER_ERROR_IF, Ppath::np, Ppath::pos, and sign().

Referenced by iyIndependentBeamApproximation(), and yRadar().

◆ find_tanpoint()

void find_tanpoint ( Index it,
const Ppath ppath 
)

Identifies the tangent point of a propagation path.

The tangent points is defined as the point with the lowest altitude.

The index of the tangent point is determined. If no tangent point is found, the index is set to -1.

Parameters
[out]itIndex of tangent point
[in]ppathPropagation path structure.
Author
Patrick Eriksson
Date
2012-04-07

Definition at line 511 of file ppath.cc.

References Ppath::np, and Ppath::pos.

Referenced by defocusing_sat2sat(), TangentPointExtract(), and TangentPointPrint().

◆ first_pos_before_altitude()

Index first_pos_before_altitude ( const Ppath p,
const Numeric alt 
)

Determines ppath position just below an altitude.

Returns -1 if the selected altitude is not passed.

Parameters
[in]ppathPropagation path structure.
[in]altAltitude
Returns
Index of found altitude
Author
Richard Larsson
Date
20??-??-??

Definition at line 523 of file ppath.cc.

References Ppath::np, and Ppath::pos.

Referenced by ppathCalcFromAltitude().

◆ geometrical_ppc()

Numeric geometrical_ppc ( const Numeric r,
const Numeric za 
)

Calculates the propagation path constant for pure geometrical calculations.

Both positive and negative zenith angles are handled.

Parameters
[in]rRadius of the sensor position.
[in]zaZenith angle of the sensor line-of-sight.
Returns
Path constant.
Author
Patrick Eriksson
Date
2002-05-17

Definition at line 97 of file ppath.cc.

References abs, ARTS_ASSERT, and DEG2RAD.

Referenced by ppath_start_stepping(), ppath_step_geom_1d(), ppath_step_geom_2d(), ppath_step_geom_3d(), ppathFixedLstep(), raytrace_1d_linear_basic(), raytrace_2d_linear_basic(), and raytrace_3d_linear_basic().

◆ geompath_from_r1_to_r2()

void geompath_from_r1_to_r2 ( Vector r,
Vector lat,
Vector za,
Numeric lstep,
const Numeric ppc,
const Numeric r1,
const Numeric lat1,
const Numeric za1,
const Numeric r2,
const bool &  tanpoint,
const Numeric lmax 
)

Determines radii, latitudes and zenith angles between two points of a propagation path.

Both start and end point are included in the returned vectors.

Parameters
[out]rRadius of propagation path points.
[out]latLatitude of propagation path points.
[out]zaZenith angle of propagation path points.
[out]lstepDistance along the path between the points.
[in]ppcPropagation path constant.
[in]r1Radius for first point.
[in]lat1Latitude for first point.
[in]za1Zenith angle for first point.
[in]r2Radius for second point.
[in]tanpointTrue if there is a tangent point (r-based) between r1 and r2. Otherwise false.
[in]lmaxLength criterion for distance between path points. A negative value means no length criterion.
Author
Patrick Eriksson
Date
2002-07-03

Definition at line 224 of file ppath.cc.

References abs, ANGTOL, geompath_l_at_r(), geompath_lat_at_za(), geompath_r_at_l(), geompath_za_at_r(), Interpolation::l(), max, Vector::resize(), and sign().

Referenced by do_gridrange_1d().

◆ geompath_l_at_r()

Numeric geompath_l_at_r ( const Numeric ppc,
const Numeric r 
)

Calculates the length from the tangent point for the given radius.

The tangent point is either real or imaginary depending on the zenith angle of the sensor. See geometrical_tangent_radius.

Parameters
[in]ppcPropagation path constant.
[in]rRadius of the point of concern.
Returns
Length along the path from the tangent point. Always >= 0.
Author
Patrick Eriksson
Date
2002-05-20

Definition at line 159 of file ppath.cc.

References ARTS_ASSERT, RTOL, and sqrt().

Referenced by cart2poslos(), geompath_from_r1_to_r2(), plevel_crossing_2d(), ppath_start_stepping(), r_crossing_2d(), raytrace_1d_linear_basic(), and raytrace_2d_linear_basic().

◆ geompath_lat_at_za()

Numeric geompath_lat_at_za ( const Numeric za0,
const Numeric lat0,
const Numeric za 
)

Calculates the latitude for a given zenith angle along a geometrical propagation path.

Positive and negative zenith angles are handled. A positive zenith angle means a movement towards higher latitudes.

Parameters
[in]za0The zenith angle of the starting point.
[in]lat0The latitude of the starting point.
[in]zaThe zenith angle of the second point.
Returns
The latitude of the second point.
Author
Patrick Eriksson
Date
2002-05-17

Definition at line 149 of file ppath.cc.

References abs, and ARTS_ASSERT.

Referenced by geompath_from_r1_to_r2(), ppath_start_stepping(), ppathFixedLstep(), r_crossing_2d(), raytrace_1d_linear_basic(), and raytrace_2d_linear_basic().

◆ geompath_r_at_l()

Numeric geompath_r_at_l ( const Numeric ppc,
const Numeric l 
)

Calculates the radius for a distance from the tangent point.

The tangent point is either real or imaginary depending on the zenith angle of the sensor. See geometrical_tangent_radius.

Parameters
[in]ppcPropagation path constant.
[in]lLength from the tangent point (positive or negative).
Returns
Radius.
Author
Patrick Eriksson
Date
2002-05-20

Definition at line 170 of file ppath.cc.

References ARTS_ASSERT, Interpolation::l(), and sqrt().

Referenced by geompath_from_r1_to_r2(), raytrace_1d_linear_basic(), and raytrace_2d_linear_basic().

◆ geompath_r_at_lat()

Numeric geompath_r_at_lat ( const Numeric ppc,
const Numeric lat0,
const Numeric za0,
const Numeric lat 
)

Calculates the radius for a given latitude.

Parameters
[in]ppcPropagation path constant.
[in]lat0Latitude at some other point of the path.
[in]za0Zenith angle for the point with latitude lat0.
[in]latLatitude of the point of interest.
Returns
Radius at the point of interest.
Author
Patrick Eriksson
Date
2002-06-05

Definition at line 188 of file ppath.cc.

References abs, ARTS_ASSERT, and geompath_r_at_za().

◆ geompath_r_at_za()

Numeric geompath_r_at_za ( const Numeric ppc,
const Numeric za 
)

Calculates the zenith angle for a given radius along a geometrical propagation path.

Both positive and negative zenith angles are handled.

Parameters
[in]ppcPropagation path constant.
[in]zaZenith angle at the point of interest.
Returns
Radius at the point of interest.
Author
Patrick Eriksson
Date
2002-06-05

Definition at line 142 of file ppath.cc.

References abs, ARTS_ASSERT, and DEG2RAD.

Referenced by geompath_r_at_lat().

◆ geompath_za_at_r()

Numeric geompath_za_at_r ( const Numeric ppc,
const Numeric a_za,
const Numeric r 
)

Calculates the zenith angle for a given radius along a geometrical propagation path.

For downlooking cases, the two points must be on the same side of the tangent point.

Both positive and negative zenith angles are handled.

Parameters
[in]ppcPropagation path constant.
[in]a_zaA zenith angle along the path on the same side of the tangent point as the point of interest.
[in]rRadius of the point of interest.
Returns
Zenith angle at the point of interest.
Author
Patrick Eriksson
Date
2002-05-17

Definition at line 104 of file ppath.cc.

References abs, ARTS_ASSERT, RAD2DEG, and RTOL.

Referenced by geompath_from_r1_to_r2(), ppath_start_stepping(), ppathFixedLstep(), r_crossing_2d(), raytrace_1d_linear_basic(), raytrace_2d_linear_basic(), and VectorZtanToZa1D().

◆ is_los_downwards()

bool is_los_downwards ( const Numeric za,
const Numeric tilt 
)

Determines if a line-of-sight is downwards compared to the angular tilt of the surface or a pressure level.

For example, this function can be used to determine if the line-of-sight goes into the surface for a starting point exactly on the surface radius.

As the radius of the surface and pressure levels varies as a function of latitude, it is not clear if a zenith angle of 90 is above or below e.g. the surface.

Parameters
[in]zaZenith angle of line-of-sight.
[in]tiltAngular tilt of the surface or the pressure level (as returned by plevel_angletilt)
Returns
Boolean that is true if LOS is downwards.
Author
Patrick Eriksson
Date
2002-06-03

Definition at line 623 of file ppath.cc.

References abs, and ARTS_ASSERT.

Referenced by ppath_start_2d(), ppath_start_3d(), and ppath_start_stepping().

◆ plevel_angletilt()

Numeric plevel_angletilt ( const Numeric r,
const Numeric c 
)

Calculates the angular tilt of the surface or a pressure level.

Note that the tilt value is a local value. The tilt for a constant slope value, is different for different radii.

Parameters
[in]rThe radius for the level at the point of interest.
[in]c1The radial slope, as returned by e.g. plevel_slope_2d.
Returns
The angular tilt [deg].
Author
Patrick Eriksson
Date
2002-06-03

Definition at line 617 of file ppath.cc.

References RAD2DEG.

Referenced by ppath_start_2d(), ppath_start_3d(), ppath_start_stepping(), and specular_losCalc().

◆ plevel_crossing_2d()

void plevel_crossing_2d ( Numeric r,
Numeric lat,
Numeric l,
const Numeric r_start0,
const Numeric lat_start,
const Numeric za_start,
const Numeric ppc,
const Numeric lat1,
const Numeric lat3,
const Numeric r1,
const Numeric r3,
const bool &  above 
)

Handles the crossing with a geometric ppaths step and a atmospheric grid box level for 2D.

That is, we have a part of a pressure level or the planet's surface, extending between two latitudes (lat1 and lat3). The radius at each latitude is given (r1 and r3). The function first of determines if the ppath crosses the level/surface between the two latitudes. If yes, the radius and the latitude of the crossing point are calculated.

If the given path point is on the pressure level (rp=r0), the solution of zero length is rejected.

Parameters
[out]rRadius at crossing.
[out]latLatitude at crossing.
[out]lLength between start and crossing points.
[in]r_start0Radius of start point.
[in]lat_startLatitude of start point.
[in]za_startLOS zenith angle at start point.
[in]ppcPropagation path constant.
[in]lat1Latitude of lower end.
[in]lat3Latitude of upper end.
[in]r1Radius at lat1.
[in]r3Radius at lat3.
[in]aboveTrue if ppath start point is above level. Otherwise false.
Author
Patrick Eriksson
Date
2012-02-19

Definition at line 855 of file ppath.cc.

References abs, ANGTOL, ARTS_ASSERT, Constant::e, geompath_l_at_r(), Interpolation::l(), L_NOT_FOUND, LAT_NOT_FOUND, max, min, plevel_slope_2d(), r_crossing_2d(), R_NOT_FOUND, rslope_crossing2d(), and rsurf_at_lat().

◆ plevel_slope_2d() [1/2]

void plevel_slope_2d ( Numeric c1,
const Numeric lat1,
const Numeric lat2,
const Numeric r1,
const Numeric r2 
)

Calculates the radial slope of the surface or a pressure level for 2D.

This function returns the same quantity as the function above, but takes the radius and latitude at two points of the pressure level, instead of vector input. That is, for this function the interesting latitude range is known when calling the function.

Parameters
[out]c1The radial slope [m/degree]
[in]lat1A latitude.
[in]lat2Another latitude.
[in]r1Radius at lat1.
[in]r2Radius at lat2.
Author
Patrick Eriksson
Date
2002-12-21

Definition at line 609 of file ppath.cc.

◆ plevel_slope_2d() [2/2]

void plevel_slope_2d ( Numeric c1,
ConstVectorView  lat_grid,
ConstVectorView  refellipsoid,
ConstVectorView  z_surf,
const GridPos gp,
const Numeric za 
)

Calculates the radial slope of the surface or a pressure level for 2D.

The radial slope is here the derivative of the radius with respect to the latitude. The unit is accordingly m/degree.

Note that the radius is defined to change linearly between grid points, and the slope is constant between to points of the latitude grid. The radius can inside the grid range be expressed as r = r0(lat0) + c1*(lat-lat0) .

Note also that the slope is always calculated with respect to increasing latitudes, independently of the zenith angle. The zenith angle is only used to determine which grid range that is of interest when the position is exactly on top of a grid point.

Parameters
[out]c1The radial slope [m/degree]
[in]lat_gridThe latitude grid.
[in]refellipsoidAs the WSV with the same name.
[in]z_surfGeometrical altitude of the surface, or the pressure level of interest, for the latitide dimension
[in]gpLatitude grid position for the position of interest
[in]zaLOS zenith angle.
Author
Patrick Eriksson
Date
2002-06-03

Definition at line 580 of file ppath.cc.

References gridpos2gridrange(), and refell2r().

Referenced by plevel_crossing_2d(), ppath_start_2d(), ppath_start_stepping(), and specular_losCalc().

◆ plevel_slope_3d() [1/2]

void plevel_slope_3d ( Numeric c1,
Numeric c2,
const Numeric lat1,
const Numeric lat3,
const Numeric lon5,
const Numeric lon6,
const Numeric r15,
const Numeric r35,
const Numeric r36,
const Numeric r16,
const Numeric lat,
const Numeric lon,
const Numeric aa 
)

◆ plevel_slope_3d() [2/2]

void plevel_slope_3d ( Numeric c1,
Numeric c2,
ConstVectorView  lat_grid,
ConstVectorView  lon_grid,
ConstVectorView  refellipsoid,
ConstMatrixView  z_surf,
const GridPos gp_lat,
const GridPos gp_lon,
const Numeric aa 
)

Calculates the radial slope of the surface or a pressure level for 3D.

For 2D where the radius can be expressed as r = r0 + c1*dalpha, where alpha is the latitude. The radius is here for 3D expressed as a second order polynomial: r = r0 + c1*dalpha + c2*dalpha^2, where alpha is the angular change (in degrees) along the great circle along the given azimuth angle.

For a point exactly on a grid value it is not clear if it is the range below or above that is of interest. The azimuth angle is used to resolve such cases.

Parameters
[out]c1See above. Unit is m/degree.
[out]c2See above. Unit is m/degree^2.
[in]lat_gridThe latitude grid.
[in]lon_gridThe longitude grid.
[in]refellipsoidAs the WSV with the same name.
[in]z_surfGeometrical altitude of the surface, or the pressure level of interest.
[in]gp_latLatitude grid position for the position of interest.
[in]gp_lonLongitude grid position for the position of interest.
[in]aaAzimuth angle.
Author
Patrick Eriksson
Date
2002-06-03

Definition at line 1146 of file ppath.cc.

References abs, ARTS_USER_ERROR, gridpos2gridrange(), interp(), interpweights(), is_lon_cyclic(), ConstVectorView::nelem(), plevel_slope_3d(), POLELAT, and refell2r().

◆ ppath_append()

void ppath_append ( Ppath ppath1,
const Ppath ppath2 
)

Combines two Ppath structures.

The function appends a Ppath structure to another structure.

All the data of ppath1 is kept.

The first point in ppath2 is assumed to be the same as the last in ppath1. Only ppath2 fields start_pos, start_los, start_lstep, pos, los, r, lstep, nreal, ngroup, gp_XXX and background are considered.

Parameters
[in,out]ppath1Ppath structure to be expanded.
[in]ppath2The Ppath structure to include in ppath.
Author
Patrick Eriksson
Date
2002-07-03

Definition at line 1563 of file ppath.cc.

References Ppath::background, Ppath::dim, Ppath::gp_lat, Ppath::gp_lon, Ppath::gp_p, gridpos_copy(), Ppath::los, Ppath::lstep, Ppath::ngroup, Ppath::np, Ppath::nreal, Ppath::pos, ppath_copy(), ppath_init_structure(), ppath_what_background(), Ppath::r, Ppath::start_los, Ppath::start_lstep, and Ppath::start_pos.

◆ 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 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_lmax,
const Numeric ppath_lraytrace,
const bool &  ppath_inside_cloudbox_do,
const Verbosity verbosity 
)

This is the core for the WSM ppathStepByStep.

This function takes mainly the same input as ppathStepByStep (that is, those input arguments are the WSV with the same name).

Parameters
[in]wsCurrent Workspace
[in]ppathOutput: A Ppath structure
[in]ppath_step_agendaAs the WSM with the same name.
[in]atmosphere_dimThe atmospheric dimensionality.
[in]p_gridThe pressure grid.
[in]lat_gridThe latitude grid.
[in]lon_gridThe longitude grid.
[in]z_fieldAs the WSM with the same name.
[in]f_gridAs the WSM with the same name.
[in]refellipsoidAs the WSM with the same name.
[in]z_surfaceSurface altitude.
[in]cloudbox_onFlag to activate the cloud box.
[in]cloudbox_limitsIndex limits of the cloud box.
[in]rte_posThe position of the sensor.
[in]rte_losThe line-of-sight of the sensor.
[in]ppath_lmaxAs the WSM with the same name.
[in]ppath_lraytraceAs the WSM with the same name.
[in]ppath_inside_cloudbox_doAs the WSM with the same name.
Author
Patrick Eriksson
Date
2003-01-08

Definition at line 5178 of file ppath.cc.

References abs, ARTS_ASSERT, ARTS_USER_ERROR, ARTS_USER_ERROR_IF, Ppath::background, chk_rte_los(), chk_rte_pos(), Ppath::constant, Ppath::end_los, Ppath::end_lstep, Ppath::end_pos, fractional_gp(), Ppath::gp_lat, Ppath::gp_lon, Ppath::gp_p, gridpos(), is_gridpos_at_index_i(), joker, Ppath::los, Ppath::lstep, Array< base >::nelem(), ConstVectorView::nelem(), Ppath::ngroup, Ppath::np, Ppath::nreal, Ppath::pos, ppath_copy(), ppath_init_structure(), ppath_set_background(), ppath_start_stepping(), ppath_step_agendaExecute(), ppath_what_background(), Ppath::r, Ppath::start_los, Ppath::start_lstep, and Ppath::start_pos.

Referenced by defocusing_general_sub(), defocusing_sat2sat(), ppathFromRtePos2(), ppathStepByStep(), and surface_get_incoming_direct().

◆ ppath_copy()

void ppath_copy ( Ppath ppath1,
const Ppath ppath2,
const Index ncopy 
)

Copy the content in ppath2 to ppath1.

The ppath1 structure must be allocated before calling the function. The structure can be allocated to hold more points than found in ppath2. The data of ppath2 is placed in the first positions of ppath1.

Parameters
[in]ppath1Output: Ppath structure.
[in]ppath2The ppath structure to be copied.
[in]ncopyNumber of points in ppath2 to copy. If set to negative, the number is set to ppath2.np.
Author
Patrick Eriksson
Date
2002-07-03

Definition at line 1497 of file ppath.cc.

References ARTS_ASSERT, Ppath::background, Ppath::constant, Ppath::dim, Ppath::end_los, Ppath::end_lstep, Ppath::end_pos, Ppath::gp_lat, Ppath::gp_lon, Ppath::gp_p, gridpos_copy(), joker, Ppath::los, Ppath::lstep, Ppath::ngroup, Ppath::np, Ppath::nreal, Ppath::pos, Ppath::r, Ppath::start_los, Ppath::start_lstep, and Ppath::start_pos.

Referenced by ppath_append(), ppath_calc(), and ppathFromRtePos2().

◆ ppath_end_1d()

void ppath_end_1d ( Ppath ppath,
ConstVectorView  r_v,
ConstVectorView  lat_v,
ConstVectorView  za_v,
ConstVectorView  lstep,
ConstVectorView  n_v,
ConstVectorView  ng_v,
ConstVectorView  z_field,
ConstVectorView  refellipsoid,
const Index ip,
const Index endface,
const Numeric ppc 
)

Internal help function for 1D path calculations.

The function performs the end part of the calculations, that are common for geometrical and refraction calculations.

See the code for details.

Author
Patrick Eriksson
Date
2002-11-27

Definition at line 1652 of file ppath.cc.

References Ppath::constant, Ppath::gp_p, gridpos_check_fd(), gridpos_force_end_fd(), Ppath::los, Ppath::lstep, ConstVectorView::nelem(), Ppath::ngroup, Ppath::nreal, Ppath::pos, ppath_init_structure(), ppath_set_background(), and Ppath::r.

Referenced by ppath_step_geom_1d(), and ppath_step_refr_1d().

◆ ppath_end_2d()

void ppath_end_2d ( Ppath ppath,
ConstVectorView  r_v,
ConstVectorView  lat_v,
ConstVectorView  za_v,
ConstVectorView  lstep,
ConstVectorView  n_v,
ConstVectorView  ng_v,
ConstVectorView  lat_grid,
ConstMatrixView  z_field,
ConstVectorView  refellipsoid,
const Index ip,
const Index ilat,
const Index endface,
const Numeric ppc 
)

Internal help function for 2D path calculations.

The function performs the end part of the calculations, that are common for geometrical and refraction calculations.

See the code for details.

Author
Patrick Eriksson
Date
2002-11-29

Definition at line 1826 of file ppath.cc.

References Ppath::constant, Ppath::gp_lat, Ppath::gp_p, gridpos_check_fd(), gridpos_force_end_fd(), Ppath::los, Ppath::lstep, ConstVectorView::nelem(), Ppath::ngroup, Ppath::nreal, ConstMatrixView::nrows(), Ppath::pos, ppath_init_structure(), ppath_set_background(), Ppath::r, refell2r(), and w.

Referenced by ppath_step_geom_2d(), and ppath_step_refr_2d().

◆ ppath_end_3d()

void ppath_end_3d ( Ppath ppath,
ConstVectorView  r_v,
ConstVectorView  lat_v,
ConstVectorView  lon_v,
ConstVectorView  za_v,
ConstVectorView  aa_v,
ConstVectorView  lstep,
ConstVectorView  n_v,
ConstVectorView  ng_v,
ConstVectorView  lat_grid,
ConstVectorView  lon_grid,
ConstTensor3View  z_field,
ConstVectorView  refellipsoid,
const Index ip,
const Index ilat,
const Index ilon,
const Index endface,
const Numeric ppc 
)

Internal help function for 3D path calculations.

The function performs the end part of the calculations, that are common for geometrical and refraction calculations.

See the code for details.

Author
Patrick Eriksson
Date
2002-12-30

Definition at line 2123 of file ppath.cc.

References abs, Ppath::constant, Ppath::gp_lat, Ppath::gp_lon, Ppath::gp_p, gridpos_check_fd(), gridpos_force_end_fd(), Ppath::los, Ppath::lstep, ConstVectorView::nelem(), Ppath::ngroup, ConstTensor3View::npages(), Ppath::nreal, POLELAT, Ppath::pos, ppath_init_structure(), ppath_set_background(), Ppath::r, refell2r(), and rsurf_at_latlon().

Referenced by ppath_step_geom_3d(), and ppath_step_refr_3d().

◆ ppath_init_structure()

void ppath_init_structure ( Ppath ppath,
const Index atmosphere_dim,
const Index np 
)

Initiates a Ppath structure to hold the given number of points.

The background field is set to background case 0. The constant field is set to -1. The refraction field is set to 0.

The length of the lstep field is set to np-1.

Parameters
[in]ppathOutput: A Ppath structure.
[in]atmosphere_dimThe atmospheric dimensionality.
[in]npNumber of points of the path.
Author
Patrick Eriksson
Date
2002-05-17

Definition at line 1410 of file ppath.cc.

References ARTS_ASSERT, Ppath::constant, Ppath::dim, Ppath::end_los, Ppath::end_lstep, Ppath::end_pos, Ppath::gp_lat, Ppath::gp_lon, Ppath::gp_p, Ppath::los, Ppath::lstep, max, Ppath::ngroup, Ppath::np, Ppath::nreal, Ppath::pos, ppath_set_background(), Ppath::r, Vector::resize(), Matrix::resize(), Ppath::start_los, Ppath::start_lstep, and Ppath::start_pos.

Referenced by cloud_ppath_update1D(), cloud_ppath_update1D_noseq(), cloud_ppath_update3D(), ppath_append(), ppath_calc(), ppath_end_1d(), ppath_end_2d(), ppath_end_3d(), ppath_start_stepping(), ppathFixedLstep(), ppathFromRtePos2(), and ppathPlaneParallel().

◆ ppath_set_background()

void ppath_set_background ( Ppath ppath,
const Index case_nr 
)

Sets the background field of a Ppath structure.

The different background cases have a number coding to simplify a possible change of the strings and checking of the what case that is valid.

The case numbers are:
0. Unvalid.

  1. Space.
  2. The surface.
  3. The cloud box boundary.
  4. The interior of the cloud box.
Parameters
[in]ppathOutput: A Ppath structure.
[in]case_nrCase number (see above)
Author
Patrick Eriksson
Date
2002-05-17

Definition at line 1451 of file ppath.cc.

References ARTS_USER_ERROR, and Ppath::background.

Referenced by mcPathTraceGeneral(), ppath_calc(), ppath_end_1d(), ppath_end_2d(), ppath_end_3d(), ppath_init_structure(), ppath_start_stepping(), ppathFixedLstep(), ppathFromRtePos2(), and ppathPlaneParallel().

◆ ppath_start_1d()

void ppath_start_1d ( Numeric r_start,
Numeric lat_start,
Numeric za_start,
Index ip,
const Ppath ppath 
)

Internal help function for 1D path calculations.

The function does the asserts and determined some variables that are common for geometrical and refraction calculations.

See the code for details.

Author
Patrick Eriksson
Date
2002-11-13

Definition at line 1623 of file ppath.cc.

References Ppath::gp_p, gridpos2gridrange(), Ppath::los, Ppath::np, Ppath::pos, and Ppath::r.

Referenced by ppath_step_geom_1d(), and ppath_step_refr_1d().

◆ ppath_start_2d()

void ppath_start_2d ( Numeric r_start,
Numeric lat_start,
Numeric za_start,
Index ip,
Index ilat,
Numeric lat1,
Numeric lat3,
Numeric r1a,
Numeric r3a,
Numeric r3b,
Numeric r1b,
Numeric rsurface1,
Numeric rsurface3,
Ppath ppath,
ConstVectorView  lat_grid,
ConstMatrixView  z_field,
ConstVectorView  refellipsoid,
ConstVectorView  z_surface 
)

Internal help function for 2D path calculations.

The function does the asserts and determined some variables that are common for geometrical and refraction calculations.

See the code for details.

Author
Patrick Eriksson
Date
2002-11-18

Definition at line 1716 of file ppath.cc.

References abs, Ppath::gp_lat, Ppath::gp_p, gridpos2gridrange(), gridpos_force_end_fd(), is_gridpos_at_index_i(), is_los_downwards(), Ppath::los, Ppath::np, ConstMatrixView::nrows(), plevel_angletilt(), plevel_slope_2d(), Ppath::pos, Ppath::r, refell2r(), rsurf_at_lat(), and RTOL.

Referenced by ppath_step_geom_2d(), and ppath_step_refr_2d().

◆ ppath_start_3d()

void ppath_start_3d ( Numeric r_start,
Numeric lat_start,
Numeric lon_start,
Numeric za_start,
Numeric aa_start,
Index ip,
Index ilat,
Index ilon,
Numeric lat1,
Numeric lat3,
Numeric lon5,
Numeric lon6,
Numeric r15a,
Numeric r35a,
Numeric r36a,
Numeric r16a,
Numeric r15b,
Numeric r35b,
Numeric r36b,
Numeric r16b,
Numeric rsurface15,
Numeric rsurface35,
Numeric rsurface36,
Numeric rsurface16,
Ppath ppath,
ConstVectorView  lat_grid,
ConstVectorView  lon_grid,
ConstTensor3View  z_field,
ConstVectorView  refellipsoid,
ConstMatrixView  z_surface 
)

Internal help function for 3D path calculations.

The function does the asserts and determined some variables that are common for geometrical and refraction calculations.

See the code for details.

Author
Patrick Eriksson
Date
2002-12-30

Definition at line 1933 of file ppath.cc.

References abs, Constant::e, Ppath::gp_lat, Ppath::gp_lon, Ppath::gp_p, gridpos(), gridpos2gridrange(), is_gridpos_at_index_i(), is_los_downwards(), Ppath::los, ConstVectorView::nelem(), Ppath::np, plevel_angletilt(), plevel_slope_3d(), Ppath::pos, Ppath::r, and refell2r().

Referenced by ppath_step_geom_3d(), and ppath_step_refr_3d().

◆ ppath_start_stepping()

void ppath_start_stepping ( Ppath ppath,
const Index atmosphere_dim,
ConstVectorView  p_grid,
ConstVectorView  lat_grid,
ConstVectorView  lon_grid,
ConstTensor3View  z_field,
ConstVectorView  refellipsoid,
ConstMatrixView  z_surface,
const Index cloudbox_on,
const ArrayOfIndex cloudbox_limits,
const bool &  outside_cloudbox,
ConstVectorView  rte_pos,
ConstVectorView  rte_los,
const Verbosity verbosity 
)

Initiates a Ppath structure for calculation of a path with ppath_step.

The function performs two main tasks. As mentioned above, it initiates a Ppath structure (a), but it also checks that the end point of the path is at an allowed location (b).

(a): The Ppath structure is set to hold the position and LOS of the last point of the path inside the atmosphere. This point is either the sensor position, or the point where the path leaves the model atmosphere. If the path is totally outside the atmosphere, no point is put into the structure. If the (practical) end and start points are identical, such as when the sensor is inside the cloud box, the background field is set.

(b): If it is found that the end point of the path is at an illegal position a detailed error message is given. Not allowed cases are:

  1. The sensor is placed below surface level.
  2. For 2D and 3D, the path leaves the model atmosphere at a latitude or longitude end face.
  3. For 2D and 3D, the path is totally outside the atmosphere and the latitude and longitude of the tangent point is outside the range of the corresponding grids.

All input variables are identical with the WSV with the same name. The output variable is here called ppath for simplicity, but is in fact ppath_step.

Parameters
[in]ppathOutput: A Ppath structure.
[in]atmosphere_dimThe atmospheric dimensionality.
[in]p_gridThe pressure grid.
[in]lat_gridThe latitude grid.
[in]lon_gridThe longitude grid.
[in]z_fieldThe field of geometrical altitudes.
[in]refellipsoidAs the WSV with the same name.
[in]z_surfaceSurface altitude.
[in]cloudbox_onFlag to activate the cloud box.
[in]cloudbox_limitsIndex limits of the cloud box.
[in]ppath_inside_cloudbox_doAs the WSV with the same name.
[in]rte_posThe position of the sensor.
[in]rte_losThe line-of-sight of the sensor.
Author
Patrick Eriksson
Date
2002-05-17

Definition at line 4477 of file ppath.cc.

References abs, ARTS_ASSERT, ARTS_USER_ERROR_IF, cart2poslos(), Ppath::constant, CREATE_OUT1, DEBUG_ONLY, dx, Ppath::end_los, Ppath::end_lstep, Ppath::end_pos, fractional_gp(), geometrical_ppc(), geompath_l_at_r(), geompath_lat_at_za(), geompath_za_at_r(), Ppath::gp_lat, Ppath::gp_lon, Ppath::gp_p, gridpos(), gridpos_check_fd(), gridpos_copy(), interp(), interpweights(), is_los_downwards(), joker, L_NOT_FOUND, LACC, Ppath::los, ConstVectorView::nelem(), Ppath::ngroup, Ppath::nreal, plevel_angletilt(), plevel_slope_2d(), plevel_slope_3d(), Ppath::pos, poslos2cart(), ppath_init_structure(), ppath_set_background(), Ppath::r, r_crossing_2d(), r_crossing_3d(), refell2d(), refell2r(), resolve_lon(), rte_pos2gridpos(), and RTOL.

Referenced by mcPathTraceGeneral(), mcPathTraceRadar(), and ppath_calc().

◆ ppath_step_geom_1d()

void ppath_step_geom_1d ( Ppath ppath,
ConstVectorView  z_field,
ConstVectorView  refellipsoid,
const Numeric z_surface,
const Numeric lmax 
)

Calculates 1D geometrical propagation path steps.

This is the core function to determine 1D propagation path steps by pure geometrical calculations. Path points are included for crossings with the grids, tangent points and points of intersection with the surface. In addition, points are included in the propgation path to ensure that the distance along the path between the points does not exceed the selected maximum length (lmax). If lmax is <= 0, this means that no length criterion shall be applied.

Note that the input variables are here compressed to only hold data for a 1D atmosphere. For example, z_field is z_field(:,0,0).

For more information read the chapter on propagation paths in AUG.

Parameters
[in]ppathOutput: A Ppath structure.
[in]z_fieldGeometrical altitudes corresponding to p_grid.
[in]refellipsoidAs the WSV with the same name.
[in]z_surfaceSurface altitude.
[in]lmaxMaximum allowed length between the path points.
Author
Patrick Eriksson
Date
2002-05-20

Definition at line 2354 of file ppath.cc.

References Ppath::constant, do_gridrange_1d(), geometrical_ppc(), ConstVectorView::nelem(), ppath_end_1d(), and ppath_start_1d().

Referenced by ppath_stepGeometric().

◆ ppath_step_geom_2d()

void ppath_step_geom_2d ( Ppath ppath,
ConstVectorView  lat_grid,
ConstMatrixView  z_field,
ConstVectorView  refellipsoid,
ConstVectorView  z_surface,
const Numeric lmax 
)

Calculates 2D geometrical propagation path steps.

Works as the same function for 1D, despite that some input arguments are of different type.

Parameters
[in]ppathOutput: A Ppath structure.
[in]lat_gridLatitude grid.
[in]z_fieldGeometrical altitudes
[in]refellipsoidAs the WSV with the same name.
[in]z_surfaceSurface altitudes.
[in]lmaxMaximum allowed length between the path points.
Author
Patrick Eriksson
Date
2002-07-03

Definition at line 2718 of file ppath.cc.

References Ppath::constant, do_gridcell_2d_byltest(), geometrical_ppc(), ConstVectorView::nelem(), ppath_end_2d(), and ppath_start_2d().

Referenced by ppath_stepGeometric().

◆ ppath_step_geom_3d()

void ppath_step_geom_3d ( Ppath ppath,
ConstVectorView  lat_grid,
ConstVectorView  lon_grid,
ConstTensor3View  z_field,
ConstVectorView  refellipsoid,
ConstMatrixView  z_surface,
const Numeric lmax 
)

Calculates 3D geometrical propagation path steps.

Works as the same function for 1D despite that some input arguments are of different type.

Parameters
[in]ppathOutput: A Ppath structure.
[in]lat_gridLatitude grid.
[in]lon_gridLongitude grid.
[in]z_fieldGeometrical altitudes
[in]refellipsoidAs the WSV with the same name.
[in]z_surfaceSurface altitudes.
[in]lmaxMaximum allowed length between the path points.
Author
Patrick Eriksson
Date
2002-12-30

Definition at line 3252 of file ppath.cc.

References Ppath::constant, do_gridcell_3d_byltest(), geometrical_ppc(), ConstVectorView::nelem(), ppath_end_3d(), and ppath_start_3d().

Referenced by ppath_stepGeometric().

◆ ppath_step_refr_1d()

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_agenda,
const String rtrace_method,
const Numeric lraytrace 
)

Calculates 1D propagation path steps including effects of refraction.

This function works as the function ppath_step_geom_1d but considers also refraction. The upper length of the ray tracing steps is set by the argument lraytrace. This argument controls only the internal calculations. The maximum distance between the path points is still determined by lmax.

Parameters
[in,out]wsCurrent Workspace
[out]ppathA Ppath structure.
[in]p_gridPressure grid.
[in]z_fieldAs the WSV with the same name.
[in]t_fieldAs the WSV with the same name.
[in]vmr_fieldAs the WSV with the same name.
[in]f_gridAs the WSV with the same name.
[in]refellipsoidAs the WSV with the same name.
[in]z_surfaceSurface altitude (1D).
[in]lmaxMaximum allowed length between the path points.
[in]refr_index_air_agendaThe WSV with the same name.
[in]rtrace_methodString giving which ray tracing method to use. See the function for options.
[in]lraytraceMaximum allowed length for ray tracing steps.
Author
Patrick Eriksson
Date
2002-11-26

Definition at line 3558 of file ppath.cc.

References ARTS_ASSERT, Ppath::constant, get_refr_index_1d(), joker, Array< base >::nelem(), ppath_end_1d(), ppath_start_1d(), raytrace_1d_linear_basic(), and refraction_ppc().

Referenced by ppath_stepRefractionBasic().

◆ ppath_step_refr_2d()

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_agenda,
const String rtrace_method,
const Numeric lraytrace 
)

Calculates 2D propagation path steps, with refraction, using a simple and fast ray tracing scheme.

Works as the same function for 1D despite that some input arguments are of different type.

Parameters
[in,out]wsCurrent Workspace
[out]ppathA Ppath structure.
[in]p_gridPressure grid.
[in]lat_gridLatitude grid.
[in]z_fieldAs the WSV with the same name.
[in]t_fieldAs the WSV with the same name.
[in]vmr_fieldAs the WSV with the same name.
[in]f_gridAs the WSV with the same name.
[in]refellipsoidAs the WSV with the same name.
[in]z_surfaceSurface altitudes.
[in]lmaxMaximum allowed length between the path points.
[in]refr_index_air_agendaThe WSV with the same name.
[in]rtrace_methodString giving which ray tracing method to use. See the function for options.
[in]lraytraceMaximum allowed length for ray tracing steps.
Author
Patrick Eriksson
Date
2002-12-02

Definition at line 3902 of file ppath.cc.

References ARTS_ASSERT, joker, Array< base >::nelem(), ppath_end_2d(), ppath_start_2d(), and raytrace_2d_linear_basic().

Referenced by ppath_stepRefractionBasic().

◆ ppath_step_refr_3d()

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_agenda,
const String rtrace_method,
const Numeric lraytrace 
)

Calculates 3D propagation path steps, with refraction, using a simple and fast ray tracing scheme.

Works as the same function for 1D despite that some input arguments are of different type.

Parameters
[in,out]wsCurrent Workspace
[out]ppathA Ppath structure.
[in]p_gridPressure grid.
[in]lat_gridLatitude grid.
[in]lon_gridLongitude grid.
[in]z_fieldGeometrical altitudes.
[in]t_fieldAtmospheric temperatures.
[in]vmr_fieldVMR values.
[in]f_gridAs the WSV with the same name.
[in]refellipsoidAs the WSV with the same name.
[in]z_surfaceSurface altitudes.
[in]lmaxMaximum allowed length between the path points.
[in]refr_index_air_agendaThe WSV with the same name.
[in]rtrace_methodString giving which ray tracing method to use. See the function for options.
[in]lraytraceMaximum allowed length for ray tracing steps.
Author
Patrick Eriksson
Date
2003-01-08

Definition at line 4317 of file ppath.cc.

References ARTS_ASSERT, Array< base >::nelem(), ppath_end_3d(), ppath_start_3d(), and raytrace_3d_linear_basic().

Referenced by ppath_stepRefractionBasic().

◆ ppath_what_background()

Index ppath_what_background ( const Ppath ppath)

Returns the case number for the radiative background.

See further the function ppath_set_background.

Parameters
[in]ppathA Ppath structure.
Returns
The case number.
Author
Patrick Eriksson
Date
2002-05-17

Definition at line 1477 of file ppath.cc.

References ARTS_USER_ERROR, and Ppath::background.

Referenced by cloud_ppath_update1D(), cloud_ppath_update1D_noseq(), defocusing_general_sub(), defocusing_sat2sat(), get_iy_of_background(), get_star_background(), get_star_ppaths(), iyClearsky(), iyEmissionHybrid(), iyEmissionStandard(), iyRadarSingleScat(), iyTransmissionStandard(), mcPathTraceGeneral(), mcPathTraceRadar(), ppath_append(), ppath_calc(), ppath_stepGeometric(), ppath_stepRefractionBasic(), and ppathFromRtePos2().

◆ r_crossing_2d()

void r_crossing_2d ( Numeric lat,
Numeric l,
const Numeric r_hit,
const Numeric r_start,
const Numeric lat_start,
const Numeric za_start,
const Numeric ppc 
)

Calculates where a 2D LOS crosses the specified radius.

The function only looks for crossings in the forward direction of the given zenith angle (neglecting all solutions giving l <= 0).

For cases with r_start <= r_hit and abs(za) > 90, the tangent point is passed and the returned crossing is on the other side of the tangent point.

LAT_NOT_FOUND and L_NOT_FOUND are returned if no solution is found.

Parameters
[out]latLatitude of found crossing.
[out]lLength along the path to the crossing.
[in]r_hitRadius of the level
[in]r_startRadius of start point.
[in]lat_startLatitude of start point.
[in]za_startZenith angle at start point.
[in]ppcPropagation path constant
Author
Patrick Eriksson
Date
2012-02-18

Definition at line 655 of file ppath.cc.

References abs, ARTS_ASSERT, geompath_l_at_r(), geompath_lat_at_za(), geompath_za_at_r(), Interpolation::l(), L_NOT_FOUND, LAT_NOT_FOUND, and sign().

Referenced by plevel_crossing_2d(), and ppath_start_stepping().

◆ r_crossing_3d()

void r_crossing_3d ( Numeric lat,
Numeric lon,
Numeric l,
const Numeric r_hit,
const Numeric r_start,
const Numeric lat_start,
const Numeric lon_start,
const Numeric za_start,
const Numeric ppc,
const Numeric x,
const Numeric y,
const Numeric z,
const Numeric dx,
const Numeric dy,
const Numeric dz 
)

Calculates where a 3D LOS crosses the specified radius.

The solution algorithm is described in ATD. See the chapter on propagation paths.

The function only looks for crossings in the forward direction of the given zenith angle (neglecting all solutions giving l <= 0). Note that the tangent point can be passed.

LAT_NOT_FOUND, LON_NOT_FOUND and L_NOT_FOUND are returned if no solution is found.

Parameters
[out]latLatitude of found crossing.
[out]lonLongitude of found crossing.
[out]lLength along the path to the crossing.
[in]r_hitTarget radius.
[in]r_startRadius of start point.
[in]lat_startLatitude of start point.
[in]lon_startLongitude of start point.
[in]za_startZenith angle at start point.
[in]ppcPropagation path constant
[in]xx-coordinate of start position.
[in]yy-coordinate of start position.
[in]zz-coordinate of start position.
[in]dxx-part of LOS unit vector.
[in]dyy-part of LOS unit vector.
[in]dzz-part of LOS unit vector.
Author
Patrick Eriksson
Date
2002-12-30

Definition at line 1344 of file ppath.cc.

References abs, ANGTOL, ARTS_ASSERT, dx, Constant::e, Interpolation::l(), L_NOT_FOUND, LAT_NOT_FOUND, LON_NOT_FOUND, max, min, q, RAD2DEG, and sqrt().

Referenced by ppath_start_stepping().

◆ raytrace_1d_linear_basic()

void raytrace_1d_linear_basic ( Workspace ws,
Array< Numeric > &  r_array,
Array< Numeric > &  lat_array,
Array< Numeric > &  za_array,
Array< Numeric > &  l_array,
Array< Numeric > &  n_array,
Array< Numeric > &  ng_array,
Index endface,
ConstVectorView  p_grid,
ConstVectorView  refellipsoid,
ConstTensor3View  z_field,
ConstTensor3View  t_field,
ConstTensor4View  vmr_field,
ConstVectorView  f_grid,
const Numeric lmax,
const Agenda refr_index_air_agenda,
const Numeric lraytrace,
const Numeric rsurface,
const Numeric r1,
const Numeric r3,
Numeric  r,
Numeric  lat,
Numeric  za 
)

Performs ray tracing for 1D with linear steps.

A geometrical step with length of lraytrace is taken from each point. The zenith angle for the end point of that step is calculated considering the gradient of the refractive index. The length of the last ray tracing step is set to the distance to grid box boundary.

For more information read the chapter on propagation paths in AUG. The algorithm used is described in that part of ATD.

Parameters
[in,out]wsCurrent Workspace
[out]r_arrayRadius of ray tracing points.
[out]lat_arrayLatitude of ray tracing points.
[out]za_arrayLOS zenith angle at ray tracing points.
[out]l_arrayDistance along the path between ray tracing point
[out]n_arrayRefractive index at ray tracing points.
[out]endfaceNumber coding of exit face.
[in]p_gridThe WSV with the same name.
[in]refellipsoidThe WSV with the same name.
[in]lat_gridThe WSV with the same name.
[in]z_fieldThe WSV with the same name.
[in]t_fieldThe WSV with the same name.
[in]vmr_fieldThe WSV with the same name.
[in]f_gridAs the WSV with the same name.
[in]lmaxAs the WSV ppath_lmax
[in]refr_index_air_agendaThe WSV with the same name.
[in]lraytraceMaximum allowed length for ray tracing steps.
[in]r_surfaceRadius of the surface.
[in]r1Radius of lower pressure level.
[in]r3Radius of upper pressure level (r3 > r1).
[in]rStart radius for ray tracing.
[in]latStart latitude for ray tracing.
[in]zaStart zenith angle for ray tracing.
Author
Patrick Eriksson
Date
2002-12-02

Definition at line 3414 of file ppath.cc.

References ARTS_ASSERT, DEG2RAD, do_gridrange_1d(), geometrical_ppc(), geompath_l_at_r(), geompath_lat_at_za(), geompath_r_at_l(), geompath_za_at_r(), get_refr_index_1d(), Interpolation::l(), ConstVectorView::nelem(), RAD2DEG, and refr_gradients_1d().

Referenced by ppath_step_refr_1d().

◆ raytrace_2d_linear_basic()

void raytrace_2d_linear_basic ( Workspace ws,
Array< Numeric > &  r_array,
Array< Numeric > &  lat_array,
Array< Numeric > &  za_array,
Array< Numeric > &  l_array,
Array< Numeric > &  n_array,
Array< Numeric > &  ng_array,
Index endface,
ConstVectorView  p_grid,
ConstVectorView  lat_grid,
ConstVectorView  refellipsoid,
ConstTensor3View  z_field,
ConstTensor3View  t_field,
ConstTensor4View  vmr_field,
ConstVectorView  f_grid,
const Numeric lmax,
const Agenda refr_index_air_agenda,
const Numeric lraytrace,
const Numeric lat1,
const Numeric lat3,
const Numeric rsurface1,
const Numeric rsurface3,
const Numeric r1a,
const Numeric r3a,
const Numeric r3b,
const Numeric r1b,
Numeric  r,
Numeric  lat,
Numeric  za 
)

Performs ray tracing for 2D with linear steps.

A geometrical step with length of lraytrace is taken from each point. The zenith angle for the end point of that step is calculated considering the gradient of the refractive index. The length of the last ray tracing step is set to the distance to grid box boundary.

For more information read the chapter on propagation paths in AUG. The algorithm used is described in that part of ATD.

Parameters
[in,out]wsCurrent Workspace
[out]r_arrayRadius of ray tracing points.
[out]lat_arrayLatitude of ray tracing points.
[out]za_arrayLOS zenith angle at ray tracing points.
[out]l_arrayDistance along the path between ray tracing points
[out]n_arrayRefractive index at ray tracing points.
[out]endfaceNumber coding of exit face.
[in]p_gridThe WSV with the same name.
[in]lat_gridThe WSV with the same name.
[in]refellipsoidThe WSV with the same name.
[in]z_fieldThe WSV with the same name.
[in]t_fieldThe WSV with the same name.
[in]vmr_fieldThe WSV with the same name.
[in]f_gridAs the WSV with the same name.
[in]lmaxAs the WSV ppath_lmax
[in]refr_index_air_agendaThe WSV with the same name.
[in]lraytraceMaximum allowed length for ray tracing steps.
[in]lat1Latitude of left end face of the grid cell.
[in]lat3Latitude of right end face of the grid cell.
[in]rsurface1Radius for the surface at lat1.
[in]rsurface3Radius for the surface at lat3.
[in]r1aRadius of lower-left corner of the grid cell.
[in]r3aRadius of lower-right corner of the grid cell.
[in]r3bRadius of upper-right corner of the grid cell.
[in]r1bRadius of upper-left corner of the grid cell.
[in]rStart radius for ray tracing.
[in]latStart latitude for ray tracing.
[in]zaStart zenith angle for ray tracing.
Author
Patrick Eriksson
Date
2002-12-02

Definition at line 3720 of file ppath.cc.

References abs, ARTS_ASSERT, DEG2RAD, do_gridcell_2d_byltest(), geometrical_ppc(), geompath_l_at_r(), geompath_lat_at_za(), geompath_r_at_l(), geompath_za_at_r(), get_refr_index_2d(), Interpolation::l(), ConstVectorView::nelem(), RAD2DEG, refr_gradients_2d(), and sign().

Referenced by ppath_step_refr_2d().

◆ raytrace_3d_linear_basic()

void raytrace_3d_linear_basic ( Workspace ws,
Array< Numeric > &  r_array,
Array< Numeric > &  lat_array,
Array< Numeric > &  lon_array,
Array< Numeric > &  za_array,
Array< Numeric > &  aa_array,
Array< Numeric > &  l_array,
Array< Numeric > &  n_array,
Array< Numeric > &  ng_array,
Index endface,
ConstVectorView  refellipsoid,
ConstVectorView  p_grid,
ConstVectorView  lat_grid,
ConstVectorView  lon_grid,
ConstTensor3View  z_field,
ConstTensor3View  t_field,
ConstTensor4View  vmr_field,
ConstVectorView  f_grid,
const Numeric lmax,
const Agenda refr_index_air_agenda,
const Numeric lraytrace,
const Numeric lat1,
const Numeric lat3,
const Numeric lon5,
const Numeric lon6,
const Numeric rsurface15,
const Numeric rsurface35,
const Numeric rsurface36,
const Numeric rsurface16,
const Numeric r15a,
const Numeric r35a,
const Numeric r36a,
const Numeric r16a,
const Numeric r15b,
const Numeric r35b,
const Numeric r36b,
const Numeric r16b,
Numeric  r,
Numeric  lat,
Numeric  lon,
Numeric  za,
Numeric  aa 
)

Performs ray tracing for 3D with linear steps.

A geometrical step with length of lraytrace is taken from each point. The zenith angle for the end point of that step is calculated considering the gradient of the refractive index. The length of the last ray tracing step is set to the distance to grid box boundary.

For more information read the chapter on propagation paths in AUG. The algorithm used is described in that part of ATD.

Parameters
[in,out]wsCurrent Workspace
[out]r_arrayRadius of ray tracing points.
[out]lat_arrayLatitude of ray tracing points.
[out]lon_arrayLongitude of ray tracing points.
[out]za_arrayLOS zenith angle at ray tracing points.
[out]aa_arrayLOS azimuth angle at ray tracing points.
[out]l_arrayDistance along the path between ray tracing points.
[out]endfaceNumber coding of exit face.
[out]n_arrayRefractive index at ray tracing points.
[in]lmaxAs the WSV ppath_lmax
[in]refr_index_air_agendaThe WSV with the same name.
[in]lraytraceMaximum allowed length for ray tracing steps.
[in]refellipsoidThe WSV with the same name.
[in]p_gridThe WSV with the same name.
[in]lat_gridThe WSV with the same name.
[in]lon_gridThe WSV with the same name.
[in]z_fieldThe WSV with the same name.
[in]t_fieldThe WSV with the same name.
[in]vmr_fieldThe WSV with the same name.
[in]f_gridAs the WSV with the same name.
[in]lat1Latitude of left end face of the grid cell.
[in]lat3Latitude of right end face of the grid cell.
[in]lon5Lower longitude of the grid cell.
[in]lon6Upper longitude of the grid cell.
[in]rsurface15Radius for the surface at lat1 and lon5.
[in]rsurface35Radius for the surface at lat3 and lon5.
[in]rsurface36Radius for the surface at lat3 and lon6.
[in]rsurface16Radius for the surface at lat1 and lon6.
[in]r15aRadius of corner: lower p-level,lat1 and lon5.
[in]r35aRadius of corner: lower p-level,lat3 and lon5.
[in]r36aRadius of corner: lower p-level,lat3 and lon6.
[in]r16aRadius of corner: lower p-level,lat1 and lon6.
[in]r15bRadius of corner: upper p-level,lat1 and lon5.
[in]r35bRadius of corner: upper p-level,lat3 and lon5.
[in]r36bRadius of corner: upper p-level,lat3 and lon6.
[in]r16bRadius of corner: upper p-level,lat1 and lon6.
[in]rOut: Start radius for ray tracing.
[in]latOut: Start latitude for ray tracing.
[in]lonOut: Start longitude for ray tracing.
[in]zaOut: Start zenith angle for ray tracing.
[in]aaOut: Start azimuth angle for ray tracing.
Author
Patrick Eriksson
Date
2003-01-18

Definition at line 4077 of file ppath.cc.

References abs, adjust_los(), ANGTOL, ARTS_ASSERT, cart2poslos(), DEG2RAD, do_gridcell_3d_byltest(), dx, geometrical_ppc(), get_refr_index_3d(), ConstVectorView::nelem(), poslos2cart(), RAD2DEG, refr_gradients_3d(), and resolve_lon().

Referenced by ppath_step_refr_3d().

◆ refraction_ppc()

Numeric refraction_ppc ( const Numeric r,
const Numeric za,
const Numeric refr_index_air 
)

Calculates the propagation path constant for cases with refraction.

Both positive and negative zenith angles are handled.

Parameters
[in]rRadius.
[in]zaLOS Zenith angle.
[in]refr_index_airRefractive index.
Returns
Path constant.
Author
Patrick Eriksson
Date
2002-05-17

Definition at line 492 of file ppath.cc.

References abs, ARTS_ASSERT, and DEG2RAD.

Referenced by ppath_step_refr_1d().

◆ resolve_lon()

void resolve_lon ( Numeric lon,
const Numeric lon5,
const Numeric lon6 
)

Resolves which longitude angle that shall be used.

Longitudes are allowed to vary between -360 and 360 degress, while the inverse trigonomtric functions returns values between -180 and 180. This function determines if the longitude shall be shifted -360 or +360 to fit the longitudes set by the user.

The argument lon as input is a value calculated by some inverse trigonometric function. The arguments lon5 and lon6 are the lower and upper limit for the probable range for lon. The longitude lon* will be shifted with -360 or +360 degrees if lon is significantly outside lon5 and lon6. No error is given if it is not possible to obtain a value between lon5 and lon6.

Parameters
[in,out]lonLongitude, possible shifted when returned.
[in]lon5Lower limit of probable range for lon.
[in]lon6Upper limit of probable range for lon
Author
Patrick Eriksson
Date
2003-01-05

Definition at line 501 of file ppath.cc.

References ARTS_ASSERT.

Referenced by do_gridcell_3d_byltest(), plevel_slope_3d(), ppath_start_stepping(), raytrace_3d_linear_basic(), surf_radius_at_l(), and surfaceFastem().

◆ rotationmat3D()

void rotationmat3D ( Matrix R,
ConstVectorView  vrot,
const Numeric a 
)

Creates a 3D rotation matrix.

Creates a rotation matrix such that R * x, operates on x by rotating x around the origin a radians around line connecting the origin to the point vrot.

The function is based on rotationmat3D.m, by Belechi (the function is found in atmlab).

Parameters
[out]RRotation matrix
[in]vrotRotation axis
[in]aRotation angle
Author
Bileschi and Patrick Eriksson
Date
2009-10-02

Definition at line 363 of file ppath.cc.

References ARTS_ASSERT, Interpolation::l(), ConstVectorView::nelem(), Constant::R, sqrt(), u, v, and w.

Referenced by add_za_aa(), and diff_za_aa().

◆ rslope_crossing2d()

Numeric rslope_crossing2d ( const Numeric rp,
const Numeric za,
const Numeric r0,
Numeric  c1 
)

Calculates the angular distance to a crossing with a level having a radial slope.

The function solves the problem for a pressure level, or the planet's surface, where the radius changes linearly as a function of angle. No analytical solution to the original problem has been found. The problem involves sine and cosine of the latitude difference and these functions are replaced with their Taylor expansions where the two first terms are kept. This should be OK for most practical situations (the accuracy should be sufficient for values up to 1 degree?).

The problem and its solution is further described in AUG. See the chapter on propagation paths. The variable names below are the same as in AUG.

Both positive and negative zenith angles are handled.

The function only looks for crossings in the forward direction of the given zenith angle.

If the given path point is on the pressure level (rp=r0), the solution 0 is rejected. The latitude difference is set to 999 if no crossing exists.

The cases c=0, za=0 and za=180 are not allowed.

Parameters
[in]rpRadius of a point of the path inside the grid cell
[in]zaZenith angle of the path at rp.
[in]r0Radius of the pressure level or the surface at the latitude of rp.
[in]c1Linear slope term, as returned by plevel_slope_2d.
Returns
The angular distance to the crossing.
Author
Patrick Eriksson
Date
2002-06-07

Definition at line 726 of file ppath.cc.

References abs, ARTS_ASSERT, beta, DEG2RAD, dmin, Constant::e, LAT_NOT_FOUND, poly_root_solve(), IGRF::r0, RAD2DEG, and Matrix::resize().

Referenced by plevel_crossing_2d().

◆ rslope_crossing3d()

Numeric rslope_crossing3d ( const Numeric rp,
const Numeric za,
const Numeric r0,
Numeric  c1,
Numeric  c2 
)

3D version of rslope_crossing2d.

Parameters
[in]rpRadius of a point of the path inside the grid cell
[in]zaZenith angle of the path at rp.
[in]r0Radius of the pressure level or the surface at the latitude of rp.
[in]c1Linear slope term, as returned by plevel_slope_3d.
[in]c2Quadratic slope term, as returned by plevel_slope_3d.
Returns
The angular distance to the crossing.
Author
Patrick Eriksson
Date
2012-04-24

Definition at line 1220 of file ppath.cc.

References abs, ARTS_ASSERT, beta, DEG2RAD, dmin, Constant::e, LAT_NOT_FOUND, poly_root_solve(), IGRF::r0, RAD2DEG, and Matrix::resize().

◆ rsurf_at_lat()

Numeric rsurf_at_lat ( const Numeric lat1,
const Numeric lat3,
const Numeric r1,
const Numeric r3,
const Numeric lat 
)

Determines the radius of a pressure level or the surface given the radius at the corners of a 2D grid cell.

Parameters
[in]lat1Lower latitude of grid cell.
[in]lat3Upper latitude of grid cell.
[in]r1Radius at lat1
[in]r3Radius at lat3
[in]latLatitude for which radius shall be determined.
Returns
Radius at the given latitude.
Author
Patrick Eriksson
Date
2010-03-12

Definition at line 572 of file ppath.cc.

Referenced by do_gridcell_2d_byltest(), plevel_crossing_2d(), and ppath_start_2d().

◆ rsurf_at_latlon()

Numeric rsurf_at_latlon ( const Numeric lat1,
const Numeric lat3,
const Numeric lon5,
const Numeric lon6,
const Numeric r15,
const Numeric r35,
const Numeric r36,
const Numeric r16,
const Numeric lat,
const Numeric lon 
)

Determines the radius of a pressure level or the surface given the radius at the corners of a 3D grid cell.

Parameters
[in]lat1Lower latitude of grid cell.
[in]lat3Upper latitude of grid cell.
[in]lon5Lower longitude of grid cell.
[in]lon6Upper longitude of grid cell.
[in]r15Radius at crossing of lat1 and lon5.
[in]r35Radius at crossing of lat3 and lon5.
[in]r36Radius at crossing of lat3 and lon6.
[in]r16Radius at crossing of lat1 and lon6.
[in]latLatitude for which radius shall be determined.
[in]lonLongitude for which radius shall be determined.
Returns
Radius at the given latitude and longitude.
Author
Patrick Eriksson
Date
2002-12-30

Definition at line 1039 of file ppath.cc.

Referenced by do_gridcell_3d_byltest(), plevel_slope_3d(), and ppath_end_3d().

◆ zaaa2cart()

void zaaa2cart ( Numeric dx,
Numeric dy,
Numeric dz,
const Numeric za,
const Numeric aa 
)

Converts zenith and azimuth angles to a cartesian unit vector.

This function and the sister function cart2zaaa handles transformation of line-of-sights. This in contrast to the sph/poslos functions that handles positions, or combinations of positions and line-of-sight.

The cartesian coordinate system used for these two functions can be defined as z : za = 0 x : za=90, aa=0 y : za=90, aa=90

Parameters
[out]dxx-part of LOS unit vector.
[out]dyy-part of LOS unit vector.
[out]dzz-part of LOS unit vector.
[in]zaLOS zenith angle at observation position.
[in]aaLOS azimuth angle at observation position.
Author
Patrick Eriksson
Date
2009-10-02

Definition at line 313 of file ppath.cc.

References DEG2RAD, and dx.

Referenced by add_za_aa(), adjust_los(), diff_za_aa(), and specular_losCalc().

◆ zaaa2enu()

void zaaa2enu ( Numeric de,
Numeric dn,
Numeric du,
const Numeric za,
const Numeric aa 
)

Converts zenith and azimuth angles to ENU unit vector.

This function and the sister function enu2zaaa handles transformation of line-of-sights, from and to ENU (east-north-up). The ENU vector is normalised to have length 1.

Parameters
[out]dee-part of LOS unit vector.
[out]dnn-part of LOS unit vector.
[out]duu-part of LOS unit vector.
[in]zaLOS zenith angle at observation position.
[in]aaLOS azimuth angle at observation position.
Author
Patrick Eriksson
Date
2020-09-17

Definition at line 336 of file ppath.cc.

References DEG2RAD.

Referenced by geodeticposlos2cart().

Variable Documentation

◆ DEG2RAD

◆ L_NOT_FOUND

const Numeric L_NOT_FOUND = 99e99

Definition at line 77 of file ppath.cc.

Referenced by plevel_crossing_2d(), ppath_start_stepping(), r_crossing_2d(), and r_crossing_3d().

◆ LACC

const Numeric LACC = 1e-5

Definition at line 73 of file ppath.cc.

Referenced by do_gridcell_2d_byltest(), do_gridcell_3d_byltest(), and ppath_start_stepping().

◆ LAT_NOT_FOUND

const Numeric LAT_NOT_FOUND = 99e99

◆ LON_NOT_FOUND

const Numeric LON_NOT_FOUND = 99e99

Definition at line 79 of file ppath.cc.

Referenced by r_crossing_3d().

◆ R_NOT_FOUND

const Numeric R_NOT_FOUND = -1

Definition at line 76 of file ppath.cc.

Referenced by plevel_crossing_2d().

◆ RAD2DEG

◆ RTOL