ARTS
2.4.0(git:4fb77825)
|
Interpolation routines for special purposes. More...
#include <cmath>
#include <iostream>
#include <stdexcept>
#include "auto_md.h"
#include "check_input.h"
#include "math_funcs.h"
#include "messages.h"
#include "special_interp.h"
Go to the source code of this file.
Functions | |
void | interp_atmfield_gp2itw (Matrix &itw, const Index &atmosphere_dim, const ArrayOfGridPos &gp_p, const ArrayOfGridPos &gp_lat, const ArrayOfGridPos &gp_lon) |
Converts atmospheric grid positions to weights for interpolation of an atmospheric field. More... | |
void | interp_atmfield_by_itw (VectorView x, const Index &atmosphere_dim, ConstTensor3View x_field, const ArrayOfGridPos &gp_p, const ArrayOfGridPos &gp_lat, const ArrayOfGridPos &gp_lon, ConstMatrixView itw) |
Interpolates an atmospheric field with pre-calculated weights by interp_atmfield_gp2itw. More... | |
void | interp_atmfield_by_gp (VectorView x, const Index &atmosphere_dim, ConstTensor3View x_field, const ArrayOfGridPos &gp_p, const ArrayOfGridPos &gp_lat, const ArrayOfGridPos &gp_lon) |
Interpolates an atmospheric field given the grid positions. More... | |
Numeric | interp_atmfield_by_gp (const Index &atmosphere_dim, ConstTensor3View x_field, const GridPos &gp_p, const GridPos &gp_lat, const GridPos &gp_lon) |
Interpolates an atmospheric field given the grid positions. More... | |
void | interp_cloudfield_gp2itw (VectorView itw, GridPos &gp_p_out, GridPos &gp_lat_out, GridPos &gp_lon_out, const GridPos &gp_p_in, const GridPos &gp_lat_in, const GridPos &gp_lon_in, const Index &atmosphere_dim, const ArrayOfIndex &cloudbox_limits) |
Converts atmospheric a grid position to weights for interpolation of a field defined ONLY inside the cloudbox. More... | |
void | interp_atmsurface_gp2itw (Matrix &itw, const Index &atmosphere_dim, const ArrayOfGridPos &gp_lat, const ArrayOfGridPos &gp_lon) |
Converts atmospheric grid positions to weights for interpolation of a surface-type variable. More... | |
void | interp_atmsurface_by_itw (VectorView x, const Index &atmosphere_dim, ConstMatrixView x_surface, const ArrayOfGridPos &gp_lat, const ArrayOfGridPos &gp_lon, ConstMatrixView itw) |
Interpolates a surface-type variable with pre-calculated weights by interp_atmsurface_gp2itw. More... | |
void | interp_atmsurface_by_gp (VectorView x, const Index &atmosphere_dim, ConstMatrixView x_surface, const ArrayOfGridPos &gp_lat, const ArrayOfGridPos &gp_lon) |
Interpolates a surface-type variable given the grid positions. More... | |
Numeric | interp_atmsurface_by_gp (const Index &atmosphere_dim, ConstMatrixView x_surface, const GridPos &gp_lat, const GridPos &gp_lon) |
Interpolates a surface-type variable given the grid positions. More... | |
void | regrid_atmfield_by_gp (Tensor3 &field_new, const Index &atmosphere_dim, ConstTensor3View field_old, const ArrayOfGridPos &gp_p, const ArrayOfGridPos &gp_lat, const ArrayOfGridPos &gp_lon) |
Regrids an atmospheric field, for precalculated grid positions. More... | |
void | regrid_atmsurf_by_gp (Matrix &field_new, const Index &atmosphere_dim, ConstMatrixView field_old, const ArrayOfGridPos &gp_lat, const ArrayOfGridPos &gp_lon) |
Regrids an atmospheric surface, for precalculated grid positions. More... | |
void | get_gp_atmgrids_to_rq (ArrayOfGridPos &gp_p, ArrayOfGridPos &gp_lat, ArrayOfGridPos &gp_lon, const RetrievalQuantity &rq, const Index &atmosphere_dim, const Vector &p_grid, const Vector &lat_grid, const Vector &lon_grid) |
Determines grid positions for regridding of atmospheric fields to retrieval grids. More... | |
void | get_gp_atmsurf_to_rq (ArrayOfGridPos &gp_lat, ArrayOfGridPos &gp_lon, const RetrievalQuantity &rq, const Index &atmosphere_dim, const Vector &lat_grid, const Vector &lon_grid) |
Determines grid positions for regridding of atmospheric surfaces to retrieval grids. More... | |
void | get_gp_rq_to_atmgrids (ArrayOfGridPos &gp_p, ArrayOfGridPos &gp_lat, ArrayOfGridPos &gp_lon, Index &n_p, Index &n_lat, Index &n_lon, const ArrayOfVector &ret_grids, const Index &atmosphere_dim, const Vector &p_grid, const Vector &lat_grid, const Vector &lon_grid) |
Determines grid positions for regridding of atmospheric fields to retrieval grids. More... | |
void | get_gp_rq_to_atmgrids (ArrayOfGridPos &gp_lat, ArrayOfGridPos &gp_lon, Index &n_lat, Index &n_lon, const ArrayOfVector &ret_grids, const Index &atmosphere_dim, const Vector &lat_grid, const Vector &lon_grid) |
Determines grid positions for regridding of atmospheric surfaces to retrieval grids. More... | |
void | regrid_atmfield_by_gp_oem (Tensor3 &field_new, const Index &atmosphere_dim, ConstTensor3View field_old, const ArrayOfGridPos &gp_p, const ArrayOfGridPos &gp_lat, const ArrayOfGridPos &gp_lon) |
Regridding of atmospheric field OEM-type. More... | |
void | regrid_atmsurf_by_gp_oem (Matrix &field_new, const Index &atmosphere_dim, ConstMatrixView field_old, const ArrayOfGridPos &gp_lat, const ArrayOfGridPos &gp_lon) |
Regridding of surface field OEM-type. More... | |
void | itw2p (VectorView p_values, ConstVectorView p_grid, const ArrayOfGridPos &gp, ConstMatrixView itw) |
Converts interpolation weights to pressures. More... | |
void | p2gridpos (ArrayOfGridPos &gp, ConstVectorView old_pgrid, ConstVectorView new_pgrid, const Numeric &extpolfac) |
Calculates grid positions for pressure values. More... | |
void | p2gridpos_poly (ArrayOfGridPosPoly &gp, ConstVectorView old_pgrid, ConstVectorView new_pgrid, const Index order, const Numeric &extpolfac) |
p2gridpos_poly More... | |
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) |
Converts a geographical position (rte_pos) to grid positions for p, lat and lon. More... | |
void | rte_pos2gridpos (GridPos &gp_lat, GridPos &gp_lon, const Index &atmosphere_dim, ConstVectorView lat_grid, ConstVectorView lon_grid, ConstVectorView rte_pos) |
Converts a geographical position (rte_pos) to grid positions for lat and lon. More... | |
void | z_at_lat_2d (VectorView z, ConstVectorView p_grid, ConstVectorView lat_grid, ConstMatrixView z_field, const GridPos &gp_lat) |
Returns the geomtrical altitudes of p_grid for one latitude. More... | |
void | z_at_latlon (VectorView z, ConstVectorView p_grid, ConstVectorView lat_grid, ConstVectorView lon_grid, ConstTensor3View z_field, const GridPos &gp_lat, const GridPos &gp_lon) |
Returns the geomtrical altitudes of p_grid for one latitude and one longitude. More... | |
void | complex_n_interp (MatrixView n_real, MatrixView n_imag, const GriddedField3 &complex_n, const String &varname, ConstVectorView f_grid, ConstVectorView t_grid) |
General function for interpolating data of complex n type. More... | |
Interpolation routines for special purposes.
This file contains functions connected to interpolation of non-general character. The total general interpolation routines are found in interpolation.cc.
These interpolation functions interpolate a atmospheric/surface fields to a set of points, such as the points of a propagation path. That is, "blue" interpolation. The functions assume that the grid positions are at hand. If several atmospheric fields shall be interpolated, the functions to use are interp_atmfield_gp2itw and interp_atmfield_by_itw*, where the first function is called once and the second is called for each field to be interpolated. If only one field shall be interpolated, the function interp_atmfield_by_gp* is a shortcut for calling both functions above. There exist an identical set of functions for interpolating surface-type variables, with names where atmfield is replaced with atmsurface.
Possible surface-type variables are z_surface and one page of z_field.
These functions interpolate from one set of atmospheric grids to a new set of grids.
To convert a geometric altitude to a pressure results in an interpolation of the pressure grid, or more exactly the log of the p_grid*. Such functions are placed in this file for that reason. These functions have names ending with "2p", for example itw2p.
Definition in file special_interp.cc.
void complex_n_interp | ( | MatrixView | n_real, |
MatrixView | n_imag, | ||
const GriddedField3 & | complex_n, | ||
const String & | varname, | ||
ConstVectorView | f_grid, | ||
ConstVectorView | t_grid | ||
) |
General function for interpolating data of complex n type.
See documentation of comples_refr_index for format of complex_n-.
[out] | n_real | Real part [nf,nt] |
[out] | n_imag | Imaginary part [nf,nt] |
[in] | complex_n | Complex refracton index data. |
[in] | varname | The name of complex_n to use in error message. |
[in] | f_grid | Output frequency grid [nf] |
[in] | t_grid | Output temperature grid [nt] |
Definition at line 926 of file special_interp.cc.
References GriddedField3::checksize_strict(), chk_griddedfield_gridname(), chk_interpolation_grids(), GriddedField3::data, ARTS::Var::f_grid(), GriddedField::get_numeric_grid(), gridpos(), interp(), interpweights(), joker, ConstMatrixView::ncols(), ConstTensor3View::ncols(), ConstVectorView::nelem(), ConstTensor3View::npages(), ConstMatrixView::nrows(), and ConstTensor3View::nrows().
Referenced by surfaceFlatRefractiveIndex().
void get_gp_atmgrids_to_rq | ( | ArrayOfGridPos & | gp_p, |
ArrayOfGridPos & | gp_lat, | ||
ArrayOfGridPos & | gp_lon, | ||
const RetrievalQuantity & | rq, | ||
const Index & | atmosphere_dim, | ||
const Vector & | p_grid, | ||
const Vector & | lat_grid, | ||
const Vector & | lon_grid | ||
) |
Determines grid positions for regridding of atmospheric fields to retrieval grids.
The grid positions arrays are sized inside the function. gp_lat is given length 0 for atmosphere_dim=1 etc.
This regridding uses extpolfac=0.
[out] | gp_p | Pressure grid positions. |
[out] | gp_lat | Latitude grid positions. |
[out] | gp_lon | Longitude grid positions. |
[in] | rq | Retrieval quantity structure. |
[in] | atmosphere_dim | As the WSV with same name. |
[in] | p_grid | As the WSV with same name. |
[in] | lat_grid | As the WSV with same name. |
[in] | lon_grid | As the WSV with same name. |
Definition at line 366 of file special_interp.cc.
References ARTS::Var::atmosphere_dim(), gridpos(), RetrievalQuantity::Grids(), ARTS::Var::lat_grid(), ARTS::Var::lon_grid(), Array< base >::nelem(), p2gridpos(), and ARTS::Var::p_grid().
Referenced by xaStandard().
void get_gp_atmsurf_to_rq | ( | ArrayOfGridPos & | gp_lat, |
ArrayOfGridPos & | gp_lon, | ||
const RetrievalQuantity & | rq, | ||
const Index & | atmosphere_dim, | ||
const Vector & | lat_grid, | ||
const Vector & | lon_grid | ||
) |
Determines grid positions for regridding of atmospheric surfaces to retrieval grids.
The grid positions arrays are sized inside the function. gp_lat is given length 0 for atmosphere_dim=1 etc.
This regridding uses extpolfac=0.
[out] | gp_lat | Latitude grid positions. |
[out] | gp_lon | Longitude grid positions. |
[in] | rq | Retrieval quantity structure. |
[in] | atmosphere_dim | As the WSV with same name. |
[in] | lat_grid | As the WSV with same name. |
[in] | lon_grid | As the WSV with same name. |
Definition at line 392 of file special_interp.cc.
References ARTS::Var::atmosphere_dim(), gridpos(), RetrievalQuantity::Grids(), ARTS::Var::lat_grid(), ARTS::Var::lon_grid(), and Array< base >::nelem().
void get_gp_rq_to_atmgrids | ( | ArrayOfGridPos & | gp_lat, |
ArrayOfGridPos & | gp_lon, | ||
Index & | n_lat, | ||
Index & | n_lon, | ||
const ArrayOfVector & | ret_grids, | ||
const Index & | atmosphere_dim, | ||
const Vector & | lat_grid, | ||
const Vector & | lon_grid | ||
) |
Determines grid positions for regridding of atmospheric surfaces to retrieval grids.
The grid positions arrays are sized inside the function. gp_lat is given length 0 for atmosphere_dim=1 etc.
This regridding uses extpolfac=Inf (where Inf is a very large value).
Note that the length output arguments (n_p etc.) are for the retrieval grids (not the length of grid positions arrays). n-Lat is set to 1 for atmosphere_dim=1 etc.
[out] | gp_lat | Latitude grid positions. |
[out] | gp_lon | Longitude grid positions. |
[out] | n_lat | Length of retrieval lataitude grid. |
[out] | n_lon | Length of retrieval longitude grid. |
[in] | rq | Retrieval quantity structure. |
[in] | atmosphere_dim | As the WSV with same name. |
[in] | lat_grid | As the WSV with same name. |
[in] | lon_grid | As the WSV with same name. |
Definition at line 466 of file special_interp.cc.
References ARTS::Var::atmosphere_dim(), gp4length1grid(), gridpos(), jacobian_type_extrapol(), ARTS::Var::lat_grid(), ARTS::Var::lon_grid(), and Array< base >::nelem().
void get_gp_rq_to_atmgrids | ( | ArrayOfGridPos & | gp_p, |
ArrayOfGridPos & | gp_lat, | ||
ArrayOfGridPos & | gp_lon, | ||
Index & | n_p, | ||
Index & | n_lat, | ||
Index & | n_lon, | ||
const ArrayOfVector & | ret_grids, | ||
const Index & | atmosphere_dim, | ||
const Vector & | p_grid, | ||
const Vector & | lat_grid, | ||
const Vector & | lon_grid | ||
) |
Determines grid positions for regridding of atmospheric fields to retrieval grids.
The grid positions arrays are sized inside the function. gp_lat is given length 0 for atmosphere_dim=1 etc.
This regridding uses extpolfac=Inf (where Inf is a very large value).
Note that the length output arguments (n_p etc.) are for the retrieval grids (not the length of grid positions arrays). n-Lat is set to 1 for atmosphere_dim=1 etc.
[out] | gp_p | Pressure grid positions. |
[out] | gp_lat | Latitude grid positions. |
[out] | gp_lon | Longitude grid positions. |
[out] | n_p | Length of retrieval pressure grid. |
[out] | n_lat | Length of retrieval lataitude grid. |
[out] | n_lon | Length of retrieval longitude grid. |
[in] | rq | Retrieval quantity structure. |
[in] | atmosphere_dim | As the WSV with same name. |
[in] | p_grid | As the WSV with same name. |
[in] | lat_grid | As the WSV with same name. |
[in] | lon_grid | As the WSV with same name. |
Definition at line 413 of file special_interp.cc.
References ARTS::Var::atmosphere_dim(), gp4length1grid(), gridpos(), jacobian_type_extrapol(), ARTS::Var::lat_grid(), ARTS::Var::lon_grid(), Array< base >::nelem(), p2gridpos(), and ARTS::Var::p_grid().
Referenced by AtmFieldPerturb(), and x2artsAtmAndSurf().
Numeric interp_atmfield_by_gp | ( | const Index & | atmosphere_dim, |
ConstTensor3View | x_field, | ||
const GridPos & | gp_p = {0, {0, 1}} , |
||
const GridPos & | gp_lat = {0, {0, 1}} , |
||
const GridPos & | gp_lon = {0, {0, 1}} |
||
) |
Interpolates an atmospheric field given the grid positions.
The function performs the interpolation for a number of positions. The return variable (x) is accordingly a vector. The vector must be set to have the same length as the grid position arrays before calling the function.
The input atmospheric field is checked to be consistent with the atmosphere_dim*, p_grid, lat_grid and lon_grid. The length of the grid position arrays are asserted to be the identical, or for dimensions not used, that the length is zero.
There is also a vector version of this function.
[in] | atmosphere_dim | As the WSV with the same name. |
[in] | x_field | The atmospheric field to be interpolated. |
[in] | gp_p | Pressure grid positions. |
[in] | gp_lat | Latitude grid positions. |
[in] | gp_lon | Longitude grid positions. |
Definition at line 139 of file special_interp.cc.
References ARTS::Var::atmosphere_dim(), gridpos_copy(), interp_atmfield_by_gp(), and ARTS::Var::x().
void interp_atmfield_by_gp | ( | VectorView | x, |
const Index & | atmosphere_dim, | ||
ConstTensor3View | x_field, | ||
const ArrayOfGridPos & | gp_p, | ||
const ArrayOfGridPos & | gp_lat, | ||
const ArrayOfGridPos & | gp_lon | ||
) |
Interpolates an atmospheric field given the grid positions.
The function performs the interpolation for a number of positions. The return variable (x) is accordingly a vector. The vector must be set to have the same length as the grid position arrays before calling the function.
The input atmospheric field is checked to be consistent with the atmosphere_dim*, p_grid, lat_grid and lon_grid. The length of the grid position arrays are asserted to be the identical, or for dimensions not used, that the length is zero.
There is also a return version of this function.
[out] | x | Values obtained by the interpolation. |
[in] | atmosphere_dim | As the WSV with the same name. |
[in] | x_field | The atmospheric field to be interpolated. |
[in] | gp_p | Pressure grid positions. |
[in] | gp_lat | Latitude grid positions. |
[in] | gp_lon | Longitude grid positions. |
Definition at line 126 of file special_interp.cc.
References ARTS::Var::atmosphere_dim(), interp_atmfield_by_itw(), interp_atmfield_gp2itw(), and ARTS::Var::x().
Referenced by emission_from_propmat_field(), interp_atmfield_by_gp(), and InterpAtmFieldToPosition().
void interp_atmfield_by_itw | ( | VectorView | x, |
const Index & | atmosphere_dim, | ||
ConstTensor3View | x_field, | ||
const ArrayOfGridPos & | gp_p, | ||
const ArrayOfGridPos & | gp_lat, | ||
const ArrayOfGridPos & | gp_lon, | ||
ConstMatrixView | itw | ||
) |
Interpolates an atmospheric field with pre-calculated weights by interp_atmfield_gp2itw.
The function performs the interpolation for a number of positions. The return variable (x) is accordingly a vector. The vector must be set to have the same length as the grid position arrays before calling the function.
The input atmospheric field is checked to be consistent with the atmosphere_dim*, p_grid, lat_grid and lon_grid. The length of the grid position arrays are asserted to be the identical, or for dimensions not used, that the length is zero.
[out] | x | Values obtained by the interpolation. |
[in] | atmosphere_dim | As the WSV with the same name. |
[in] | x_field | The atmospheric field to be interpolated. |
[in] | gp_p | Pressure grid positions. |
[in] | gp_lat | Latitude grid positions. |
[in] | gp_lon | Longitude grid positions. |
[in] | itw | Interpolation weights from interp_atmfield_gp2itw. |
Definition at line 101 of file special_interp.cc.
References ARTS::Var::atmosphere_dim(), interp(), joker, ConstMatrixView::ncols(), Array< base >::nelem(), and ARTS::Var::x().
Referenced by clear_rt_vars_at_gp(), cloud_atm_vars_by_gp(), get_ppath_atmvars(), get_ppath_cloudvars(), interp_atmfield_by_gp(), EnergyLevelMap::InterpToGridPos(), and iyIndependentBeamApproximation().
void interp_atmfield_gp2itw | ( | Matrix & | itw, |
const Index & | atmosphere_dim, | ||
const ArrayOfGridPos & | gp_p, | ||
const ArrayOfGridPos & | gp_lat, | ||
const ArrayOfGridPos & | gp_lon | ||
) |
Converts atmospheric grid positions to weights for interpolation of an atmospheric field.
The function is intended for "blue" interpolation, that is, interpolation for a set of positions.
The output matrix for interpolation weights are resized inside the function.
The input atmospheric grids are checked to be consistent.
[out] | itw | Interpolation weights. |
[in] | atmosphere_dim | As the WSV with the same name. |
[in] | gp_p | Pressure grid positions. |
[in] | gp_lat | Latitude grid positions. |
[in] | gp_lon | Longitude grid positions. |
Definition at line 75 of file special_interp.cc.
References ARTS::Var::atmosphere_dim(), interpweights(), Array< base >::nelem(), and Matrix::resize().
Referenced by clear_rt_vars_at_gp(), cloud_atm_vars_by_gp(), get_ppath_atmvars(), interp_atmfield_by_gp(), EnergyLevelMap::InterpToGridPos(), and iyIndependentBeamApproximation().
Numeric interp_atmsurface_by_gp | ( | const Index & | atmosphere_dim, |
ConstMatrixView | x_field, | ||
const GridPos & | gp_lat, | ||
const GridPos & | gp_lon | ||
) |
Interpolates a surface-type variable given the grid positions.
The function performs the interpolation for a number of positions. The return variable (x) is accordingly a vector. The vector must be set to have the same length as the grid position arrays before calling the function.
The input surface-type variable is checked to be consistent with the atmosphere_dim*, lat_grid and lon_grid. The length of the grid position arrays are asserted to be the identical, or for dimensions not used, that the length is zero.
There is also a vecor version of this function.
[in] | atmosphere_dim | As the WSV with the same name. |
[in] | x_surface | The atmospheric field to be interpolated. |
[in] | gp_lat | Latitude grid positions. |
[in] | gp_lon | Longitude grid positions. |
Definition at line 283 of file special_interp.cc.
References ARTS::Var::atmosphere_dim(), gridpos_copy(), interp_atmsurface_by_gp(), and ARTS::Var::x().
void interp_atmsurface_by_gp | ( | VectorView | x, |
const Index & | atmosphere_dim, | ||
ConstMatrixView | x_field, | ||
const ArrayOfGridPos & | gp_lat, | ||
const ArrayOfGridPos & | gp_lon | ||
) |
Interpolates a surface-type variable given the grid positions.
The function performs the interpolation for a number of positions. The return variable (x) is accordingly a vector. The vector must be set to have the same length as the grid position arrays before calling the function.
The input surface-type variable is checked to be consistent with the atmosphere_dim*, lat_grid and lon_grid. The length of the grid position arrays are asserted to be the identical, or for dimensions not used, that the length is zero.
There is also a return version of this function.
[out] | x | Values obtained by the interpolation. |
[in] | atmosphere_dim | As the WSV with the same name. |
[in] | x_surface | The atmospheric field to be interpolated. |
[in] | gp_lat | Latitude grid positions. |
[in] | gp_lon | Longitude grid positions. |
Definition at line 271 of file special_interp.cc.
References ARTS::Var::atmosphere_dim(), interp_atmsurface_by_itw(), interp_atmsurface_gp2itw(), and ARTS::Var::x().
Referenced by interp_atmsurface_by_gp(), and InterpSurfaceFieldToPosition().
void interp_atmsurface_by_itw | ( | VectorView | x, |
const Index & | atmosphere_dim, | ||
ConstMatrixView | x_surface, | ||
const ArrayOfGridPos & | gp_lat, | ||
const ArrayOfGridPos & | gp_lon, | ||
ConstMatrixView | itw | ||
) |
Interpolates a surface-type variable with pre-calculated weights by interp_atmsurface_gp2itw.
The function performs the interpolation for a number of positions. The return variable (x) is accordingly a vector. The vector must be set to have the same length as the grid position arrays before calling the function.
The input surface-type variable is checked to be consistent with the atmosphere_dim*, lat_grid and lon_grid. The length of the grid position arrays are asserted to be the identical, or for dimensions not used, that the length is zero.
[out] | x | Values obtained by the interpolation. |
[in] | atmosphere_dim | As the WSV with the same name. |
[in] | x_surface | The atmospheric field to be interpolated. |
[in] | gp_lat | Latitude grid positions. |
[in] | gp_lon | Longitude grid positions. |
[in] | itw | Interpolation weights from interp_atmsurface_gp2itw. |
Definition at line 247 of file special_interp.cc.
References ARTS::Var::atmosphere_dim(), interp(), joker, ConstMatrixView::ncols(), Array< base >::nelem(), and ARTS::Var::x().
Referenced by interp_atmsurface_by_gp(), and surface_props_interp().
void interp_atmsurface_gp2itw | ( | Matrix & | itw, |
const Index & | atmosphere_dim, | ||
const ArrayOfGridPos & | gp_lat, | ||
const ArrayOfGridPos & | gp_lon | ||
) |
Converts atmospheric grid positions to weights for interpolation of a surface-type variable.
The function is intended for "blue" interpolation, that is, interpolation for a set of positions.
The output matrix for interpolation weights are resized inside the function.
The input atmospheric grids are checked to be consistent.
[out] | itw | Interpolation weights. |
[in] | atmosphere_dim | As the WSV with the same name. |
[in] | gp_lat | Latitude grid positions. |
[in] | gp_lon | Longitude grid positions. |
Definition at line 224 of file special_interp.cc.
References ARTS::Var::atmosphere_dim(), interpweights(), Array< base >::nelem(), and Matrix::resize().
Referenced by interp_atmsurface_by_gp(), SurfaceFastem(), and SurfaceTessem().
void interp_cloudfield_gp2itw | ( | VectorView | itw, |
GridPos & | gp_p_out, | ||
GridPos & | gp_lat_out, | ||
GridPos & | gp_lon_out, | ||
const GridPos & | gp_p_in, | ||
const GridPos & | gp_lat_in, | ||
const GridPos & | gp_lon_in, | ||
const Index & | atmosphere_dim, | ||
const ArrayOfIndex & | cloudbox_limits | ||
) |
Converts atmospheric a grid position to weights for interpolation of a field defined ONLY inside the cloudbox.
That is, as interp_atmfield_gp2itw, but for cloudbox only variables.
The input grid position shall be with respect to total grids. If grid positions already refer to grid parts inside the cloudbox, you can use interp_atmfield_gp2itw.
The output grid positions are created by the function, to match the cloudbox field, and can be used for later calls of e.g. interp_atmfield_by_itw
[out] | itw | Interpolation weights. Vector must be given correct size before call of function. |
[in] | gp_p_out | Output: Pressure cloudbox grid position. |
[in] | gp_lat_out | Output: Latitude cloudbox grid position. |
[in] | gp_lon_out | Output: Longitude cloudbox grid position. |
[in] | gp_p_in | Pressure grid position. |
[in] | gp_lat_in | Latitude grid position. |
[in] | gp_lon_in | Longitude grid position. |
[in] | atmosphere_dim | As the WSV with the same name. |
[in] | cloudbox_limits | As the WSV with the same name. |
Definition at line 165 of file special_interp.cc.
References ARTS::Var::atmosphere_dim(), ARTS::Var::cloudbox_limits(), gridpos_copy(), gridpos_upperend_check(), GridPos::idx, interpweights(), and ConstVectorView::nelem().
Referenced by get_ppath_cloudvars(), and iyIndependentBeamApproximation().
void itw2p | ( | VectorView | p_values, |
ConstVectorView | p_grid, | ||
const ArrayOfGridPos & | gp, | ||
ConstMatrixView | itw | ||
) |
Converts interpolation weights to pressures.
The function takes interpolation weights calculated with respect to the vertical dimension, and determines the corresponding pressures. This function can be used when a geometrical altitude is known and the pressure for that altitude shall be determined. The interpolation weights are then calculated using the geometrical altitudes for the pressure levels for the position of concern.
This can be seen as a 1D "blue" interpolation. That means that the number of columns of itw shall be 2.
[out] | p_values | Found pressure values. |
[in] | p_grid | As the WSV with the same name. |
[in] | gp | Altitude grid positions. |
[in] | itw | Interpolation weights |
Definition at line 718 of file special_interp.cc.
References interp(), ConstMatrixView::ncols(), ConstVectorView::nelem(), ConstMatrixView::nrows(), ARTS::Var::p_grid(), and transform().
Referenced by clear_rt_vars_at_gp(), cloud_atm_vars_by_gp(), cloud_ppath_update3D(), get_ppath_atmvars(), get_refr_index_1d(), get_refr_index_2d(), get_refr_index_3d(), interp_cloud_coeff1D(), and iyIndependentBeamApproximation().
void p2gridpos | ( | ArrayOfGridPos & | gp, |
ConstVectorView | old_pgrid, | ||
ConstVectorView | new_pgrid, | ||
const Numeric & | extpolfac | ||
) |
Calculates grid positions for pressure values.
This function works as gridpos, but is adapted to handle pressure grids. The ARTS defintions result in that pressures shall not be interpolated directly, it is the log of the pressure that shall be interpolated. This means that if some values shall be interpolated to some given pressures, the grid positions shall be calculated with this function. The interpolation can then be performed as usual.
[out] | gp | Grid position Array. |
[in] | old_pgrid | The original pressure grid. |
[in] | new_pgrid | The new pressure grid. |
[in] | extpolfac | Extrapolation factor. Default value is 0.5, which means that extrapolation of half of the last grid distance is allowed. You don't have to specify this. |
Definition at line 759 of file special_interp.cc.
References gridpos(), ConstVectorView::nelem(), and transform().
Referenced by atm_fields_compactAddSpecies(), cloudbox_fieldSetClearsky(), diy_from_path_to_rgrids(), get_gp_atmgrids_to_rq(), get_gp_rq_to_atmgrids(), pnd_fieldCalcFrompnd_field_raw(), and z_fieldFromHSE().
void p2gridpos_poly | ( | ArrayOfGridPosPoly & | gp, |
ConstVectorView | old_pgrid, | ||
ConstVectorView | new_pgrid, | ||
const Index | order, | ||
const Numeric & | extpolfac = 0.5 |
||
) |
p2gridpos_poly
Calculates grid positions for pressure values - higher order interpolation.
This function is similar to p2gridpos, but for higher order interpolation.
[out] | gp | Grid position Array. |
[in] | old_pgrid | The original pressure grid. |
[in] | new_pgrid | The new pressure grid. |
[in] | order | Interpolation order (1=linear, 2=quadratic, etc.) |
[in] | extpolfac | Extrapolation factor. Default value is 0.5, which means that extrapolation of half of the last grid distance is allowed. You don't have to specify this. |
Definition at line 773 of file special_interp.cc.
References gridpos_poly(), ConstVectorView::nelem(), and transform().
Referenced by AtmFieldPRegridHelper(), GriddedFieldPRegridHelper(), MagFieldsCalc(), and WindFieldsCalc().
void regrid_atmfield_by_gp | ( | Tensor3 & | field_new, |
const Index & | atmosphere_dim, | ||
ConstTensor3View | field_old, | ||
const ArrayOfGridPos & | gp_p, | ||
const ArrayOfGridPos & | gp_lat, | ||
const ArrayOfGridPos & | gp_lon | ||
) |
Regrids an atmospheric field, for precalculated grid positions.
The function adopts automatically to atmosphere_dim. Grid positions not used are ignored, i.e. gp_lat is ignored for atmosphere_dim=1 etc.
[out] | field_new | Field after interpolation. |
[in] |
Definition at line 310 of file special_interp.cc.
References ARTS::Var::atmosphere_dim(), interp(), interpweights(), joker, Array< base >::nelem(), and Tensor3::resize().
Referenced by regrid_atmfield_by_gp_oem(), and xaStandard().
void regrid_atmfield_by_gp_oem | ( | Tensor3 & | field_new, |
const Index & | atmosphere_dim, | ||
ConstTensor3View | field_old, | ||
const ArrayOfGridPos & | gp_p, | ||
const ArrayOfGridPos & | gp_lat, | ||
const ArrayOfGridPos & | gp_lon | ||
) |
Regridding of atmospheric field OEM-type.
In this regridding infinite extrapolation (by closest neighbour) is allowed, including the case of that the grid length in original field can be 1.
[out] | field_new | New field. |
[in] | atmosphere_dim | Atmospheric dimensionality. |
[in] | field_old | Original field. |
[in] | gp_p | Pressure grid positions. |
[in] | gp_lat | Latitude grid positions. |
[in] | gp_lon | Longitude grid positions. |
Definition at line 507 of file special_interp.cc.
References ARTS::Var::atmosphere_dim(), interp(), interpweights(), joker, ConstTensor3View::ncols(), Array< base >::nelem(), ConstTensor3View::npages(), ConstTensor3View::nrows(), regrid_atmfield_by_gp(), and Tensor3::resize().
Referenced by AtmFieldPerturb(), and x2artsAtmAndSurf().
void regrid_atmsurf_by_gp | ( | Matrix & | field_new, |
const Index & | atmosphere_dim, | ||
ConstMatrixView | field_old, | ||
const ArrayOfGridPos & | gp_lat, | ||
const ArrayOfGridPos & | gp_lon | ||
) |
Regrids an atmospheric surface, for precalculated grid positions.
The function adopts automatically to atmosphere_dim. Grid positions not used are ignored, i.e. gp_lat is ignored for atmosphere_dim=1 etc.
[out] | field_new | Field after interpolation. |
[in] |
Definition at line 343 of file special_interp.cc.
References ARTS::Var::atmosphere_dim(), interp(), interpweights(), joker, Array< base >::nelem(), and Matrix::resize().
Referenced by regrid_atmsurf_by_gp_oem().
void regrid_atmsurf_by_gp_oem | ( | Matrix & | field_new, |
const Index & | atmosphere_dim, | ||
ConstMatrixView | field_old, | ||
const ArrayOfGridPos & | gp_lat, | ||
const ArrayOfGridPos & | gp_lon | ||
) |
Regridding of surface field OEM-type.
In this regridding infinite extrapolation (by closest neighbour) is allowed, including the case of that the grid length in original field can be 1.
[out] | field_new | New field. |
[in] | atmosphere_dim | Atmospheric dimensionality. |
[in] | field_old | Original field. |
[in] | gp_lat | Latitude grid positions. |
[in] | gp_lon | Longitude grid positions. |
Definition at line 658 of file special_interp.cc.
References ARTS::Var::atmosphere_dim(), interp(), interpweights(), joker, ARTS::Var::lon(), ConstMatrixView::ncols(), Array< base >::nelem(), ConstMatrixView::nrows(), regrid_atmsurf_by_gp(), and Matrix::resize().
void rte_pos2gridpos | ( | GridPos & | gp_lat, |
GridPos & | gp_lon, | ||
const Index & | atmosphere_dim, | ||
ConstVectorView | lat_grid, | ||
ConstVectorView | lon_grid, | ||
ConstVectorView | rte_pos | ||
) |
Converts a geographical position (rte_pos) to grid positions for lat and lon.
(surface version)
The function converts latitude and longitude in rte_pos to matching grid positions. Handles 1D, 2D and 3D (gp_lat and gp_lon untouched if not used).
Note that the function performs several checks of runtime error type.
[in] | gp_lat | Output: Latitude grid position. |
[in] | gp_lon | Output: Longitude grid position. |
[in] | atmosphere_dim | As the WSV with the same name. |
[in] | lat_grid | As the WSV with the same name. |
[in] | lon_grid | As the WSV with the same name. |
[in] | rte_pos | As the WSV with the same name. |
Definition at line 840 of file special_interp.cc.
References ARTS::Var::atmosphere_dim(), chk_interpolation_grids(), chk_rte_pos(), gridpos(), ARTS::Var::lat_grid(), ARTS::Var::lon_grid(), and ARTS::Var::rte_pos().
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 | ||
) |
Converts a geographical position (rte_pos) to grid positions for p, lat and lon.
(field version)
The function converts the altitude, latitude and longitude in rte_pos to matching grid positions. The conversion is straightforwatd for latitude and longitude. The altitude shall be converted pressure grid position which requires an interpolation of z_field.
Handles 1D, 2D and 3D (gp_lat and gp_lon untouched if not used).
Note that the function performs several checks of runtime error type.
[out] | gp_p | Pressure grid position. |
[out] | gp_lat | Latitude grid position. |
[out] | gp_lon | Longitude grid position. |
[in] | atmosphere_dim | As the WSV with the same name. |
[in] | p_grid | As the WSV with the same name. |
[in] | lat_grid | As the WSV with the same name. |
[in] | lon_grid | As the WSV with the same name. |
[in] | z_field | As the WSV with the same name. |
[in] | rte_pos | As the WSV with the same name. |
Definition at line 788 of file special_interp.cc.
References ARTS::Var::atmosphere_dim(), chk_interpolation_grids(), chk_rte_pos(), gridpos(), gridpos_1to1(), interp(), interpweights(), joker, ARTS::Var::lat_grid(), ARTS::Var::lon_grid(), ARTS::Var::p_grid(), ARTS::Var::rte_pos(), and ARTS::Var::z_field().
Referenced by InterpAtmFieldToPosition(), iyInterpCloudboxField(), ppath_start_stepping(), ppathFromRtePos2(), SurfaceFastem(), and SurfaceTessem().
void z_at_lat_2d | ( | VectorView | z, |
ConstVectorView | p_grid, | ||
ConstVectorView | lat_grid, | ||
ConstMatrixView | z_field, | ||
const GridPos & | gp_lat | ||
) |
Returns the geomtrical altitudes of p_grid for one latitude.
The latitude is specified by its grid position, in an ArrayOfGridPos of length 1. The altitude field (z_field) is then interpolated to that latitude.
[out] | z | Found altitudes. |
[in] | p_grid | As the WSV with the same name. |
[in] | lat_grid | As the WSV with the same name. |
[in] | z_field | The pressure and latitude part of the WSV with the same name (that is, the first column). |
[in] | gp_lat | Latitude grid position. |
Definition at line 860 of file special_interp.cc.
References gridpos(), gridpos_copy(), interp(), interpweights(), joker, ARTS::Var::lat_grid(), ConstVectorView::nelem(), ARTS::Var::p_grid(), and ARTS::Var::z_field().
Referenced by get_refr_index_2d().
void z_at_latlon | ( | VectorView | z, |
ConstVectorView | p_grid, | ||
ConstVectorView | lat_grid, | ||
ConstVectorView | lon_grid, | ||
ConstTensor3View | z_field, | ||
const GridPos & | gp_lat, | ||
const GridPos & | gp_lon | ||
) |
Returns the geomtrical altitudes of p_grid for one latitude and one longitude.
The latitude and longitude are specified by their grid position, in an ArrayOfGridPos of length 1. The altitude field (z_field) is then interpolated to that latitude and longitude.
[in] | z | Out: Found altitudes. |
[in] | p_grid | As the WSV with the same name. |
[in] | lat_grid | As the WSV with the same name. |
[in] | lon_grid | As the WSV with the same name. |
[in] | z_field | As the WSV with the same name. |
[in] | gp_lat | Latitude grid positions. |
[in] | gp_lon | Longitude grid positions. |
Definition at line 888 of file special_interp.cc.
References gridpos(), gridpos_copy(), interp(), interpweights(), joker, ARTS::Var::lat_grid(), ARTS::Var::lon_grid(), ConstVectorView::nelem(), ARTS::Var::p_grid(), and ARTS::Var::z_field().
Referenced by get_refr_index_3d().