ARTS
2.0.49
|
Functions to solve radiative transfer tasks. More...
#include <cmath>
#include <stdexcept>
#include "auto_md.h"
#include "check_input.h"
#include "logic.h"
#include "math_funcs.h"
#include "montecarlo.h"
#include "physics_funcs.h"
#include "ppath.h"
#include "rte.h"
#include "special_interp.h"
#include "lin_alg.h"
Go to the source code of this file.
Functions | |
void | apply_y_unit (MatrixView iy, const String &y_unit, ConstVectorView f_grid, const ArrayOfIndex &i_pol) |
apply_y_unit More... | |
void | apply_y_unit2 (Tensor3View J, ConstMatrixView iy, const String &y_unit, ConstVectorView f_grid, const ArrayOfIndex &i_pol) |
apply_y_unit2 More... | |
void | ext2trans (MatrixView trans_mat, ConstMatrixView ext_mat_av, const Numeric &l_step) |
ext2trans More... | |
void | get_ppath_atmvars (Vector &ppath_p, Vector &ppath_t, Matrix &ppath_vmr, Vector &ppath_wind_u, Vector &ppath_wind_v, Vector &ppath_wind_w, const Ppath &ppath, const Index &atmosphere_dim, ConstVectorView p_grid, ConstTensor3View t_field, ConstTensor4View vmr_field, ConstTensor3View wind_u_field, ConstTensor3View wind_v_field, ConstTensor3View wind_w_field) |
get_ppath_atmvars More... | |
void | get_ppath_pnd (Matrix &ppath_pnd, const Ppath &ppath, const Index &atmosphere_dim, const ArrayOfIndex &cloudbox_limits, ConstTensor4View pnd_field) |
get_ppath_pnd More... | |
void | get_ppath_rtvars (Workspace &ws, Tensor3 &ppath_abs_scalar, Matrix &ppath_tau, Vector &total_tau, Matrix &ppath_emission, const Agenda &abs_scalar_gas_agenda, const Agenda &emission_agenda, const Ppath &ppath, ConstVectorView ppath_p, ConstVectorView ppath_t, ConstMatrixView ppath_vmr, ConstVectorView ppath_wind_u, ConstVectorView ppath_wind_v, ConstVectorView ppath_wind_w, ConstVectorView f_grid, const Index &atmosphere_dim, const Index &emission_do) |
get_ppath_rtvars More... | |
void | get_ppath_cloudrtvars (Workspace &ws, Tensor3 &ppath_asp_abs_vec, Tensor4 &ppath_asp_ext_mat, Tensor3 &ppath_pnd_abs_vec, Tensor4 &ppath_pnd_ext_mat, Tensor4 &ppath_transmission, Tensor3 &total_transmission, Matrix &ppath_emission, Array< ArrayOfSingleScatteringData > &scat_data, const Agenda &abs_scalar_gas_agenda, const Agenda &emission_agenda, const Agenda &opt_prop_gas_agenda, const Ppath &ppath, ConstVectorView ppath_p, ConstVectorView ppath_t, ConstMatrixView ppath_vmr, ConstVectorView ppath_wind_u, ConstVectorView ppath_wind_v, ConstVectorView ppath_wind_w, ConstMatrixView ppath_pnd, const Index &use_mean_scat_data, const ArrayOfSingleScatteringData &scat_data_raw, const Index &stokes_dim, ConstVectorView f_grid, const Index &atmosphere_dim, const Index &emission_do, const Verbosity &verbosity) |
get_ppath_cloudrtvars More... | |
Range | get_rowindex_for_mblock (const Sparse &sensor_response, const Index &imblock) |
get_rowindex_for_mblock More... | |
void | iy_transmission_for_scalar_tau (Tensor3 &iy_transmission, const Index &stokes_dim, ConstVectorView tau) |
iy_transmission_for_scalar_tau More... | |
void | iy_transmission_mult (Tensor3 &iy_trans_new, ConstTensor3View iy_transmission, ConstTensor3View trans) |
iy_transmission_mult More... | |
void | iy_transmission_mult_scalar_tau (Tensor3 &iy_trans_new, ConstTensor3View iy_transmission, ConstVectorView tau) |
iy_transmission_mult_scalar_tau More... | |
void | mirror_los (Vector &los_mirrored, ConstVectorView los, const Index &atmosphere_dim) |
mirror_los More... | |
void | rte_step_std (VectorView stokes_vec, MatrixView trans_mat, ConstMatrixView ext_mat_av, ConstVectorView abs_vec_av, ConstVectorView sca_vec_av, const Numeric &l_step, const Numeric &rte_planck_value) |
rte_step_std More... | |
void | surface_calc (Matrix &iy, const Tensor3 &I, const Matrix &surface_los, const Tensor4 &surface_rmatrix, const Matrix &surface_emission) |
surface_calc More... | |
void | trans_step_std (VectorView stokes_vec, MatrixView trans_mat, ConstMatrixView ext_mat_av, const Numeric &l_step) |
trans_step_std More... | |
Variables | |
const Numeric | BOLTZMAN_CONST |
const Numeric | PLANCK_CONST |
const Numeric | SPEED_OF_LIGHT |
const Numeric | PI |
const Numeric | DEG2RAD |
const Numeric | RAD2DEG |
void apply_y_unit | ( | MatrixView | iy, |
const String & | y_unit, | ||
ConstVectorView | f_grid, | ||
const ArrayOfIndex & | i_pol | ||
) |
apply_y_unit
Performs conversion from radiance to other units.
Use apply_y_unit_jac for conversion of jacobian data.
iy | In/Out: Tensor3 with data to be converted, where column dimension corresponds to Stokes dimensionality and row dimension corresponds to frequency. |
y_unit | As the WSV. |
f_grid | As the WSV. |
i_pol | Polarisation indexes. See documentation of y_pol. |
Definition at line 82 of file rte.cc.
References invplanck(), invrayjean(), ConstMatrixView::ncols(), Array< base >::nelem(), ConstVectorView::nelem(), ConstMatrixView::nrows(), ns, and SPEED_OF_LIGHT.
Referenced by iyb_calc(), and y_unitApply().
void apply_y_unit2 | ( | Tensor3View | J, |
ConstMatrixView | iy, | ||
const String & | y_unit, | ||
ConstVectorView | f_grid, | ||
const ArrayOfIndex & | i_pol | ||
) |
apply_y_unit2
Largely as apply_y_unit but operates on jacobian data.
The associated spectrum data iy must be in radiance. That is, the spectrum can only be converted to Tb after the jacobian data.
iy* must be a single spectrum, and is accordingly here a matrix (and not a Tensor3 as for apply_y_unit).
J | In/Out: Tensor3 with data to be converted, where column dimension corresponds to Stokes dimensionality and row dimension corresponds to frequency. |
iy | Associated radiance data. |
y_unit | As the WSV. |
f_grid | As the WSV. |
Definition at line 184 of file rte.cc.
References dinvplanckdI(), invrayjean(), ConstMatrixView::ncols(), ConstTensor3View::ncols(), Array< base >::nelem(), ConstVectorView::nelem(), ConstTensor3View::npages(), ConstMatrixView::nrows(), ConstTensor3View::nrows(), ns, and SPEED_OF_LIGHT.
Referenced by iyb_calc(), and y_unitApply().
void ext2trans | ( | MatrixView | trans_mat, |
ConstMatrixView | ext_mat_av, | ||
const Numeric & | l_step | ||
) |
ext2trans
Converts an extinction matrix to a transmission matrix
The function performs the calculations differently depending on the conditions to improve the speed. There are three cases:
trans_mat | Input/Output: Transmission matrix of slab. |
ext_mat | Input: Averaged extinction matrix. |
l_step | Input: The length of the RTE step. |
Definition at line 301 of file rte.cc.
References is_diagonal(), is_singular(), is_size(), matrix_exp(), ConstMatrixView::nrows(), and q.
Referenced by get_ppath_cloudrtvars(), and trans_step_std().
void get_ppath_atmvars | ( | Vector & | ppath_p, |
Vector & | ppath_t, | ||
Matrix & | ppath_vmr, | ||
Vector & | ppath_wind_u, | ||
Vector & | ppath_wind_v, | ||
Vector & | ppath_wind_w, | ||
const Ppath & | ppath, | ||
const Index & | atmosphere_dim, | ||
ConstVectorView | p_grid, | ||
ConstTensor3View | t_field, | ||
ConstTensor4View | vmr_field, | ||
ConstTensor3View | wind_u_field, | ||
ConstTensor3View | wind_v_field, | ||
ConstTensor3View | wind_w_field | ||
) |
get_ppath_atmvars
Determines pressure, temperature, VMR and winds for each propgataion path point.
The output variables are sized inside the function. For VMR the dimensions are [ species, propagation path point ].
ppath_p | Out: Pressure for each ppath point. |
ppath_t | Out: Temperature for each ppath point. |
ppath_vmr | Out: VMR values for each ppath point. |
ppath_wind_u | Out: U-wind for each ppath point. |
ppath_wind_v | Out: V-wind for each ppath point. |
ppath_wind_w | Out: W-wind for each ppath point. |
ppath | As the WSV. |
atmosphere_dim | As the WSV. |
p_grid | As the WSV. |
lat_grid | As the WSV. |
lon_grid | As the WSV. |
t_field | As the WSV. |
vmr_field | As the WSV. |
wind_u_field | As the WSV. |
wind_v_field | As the WSV. |
wind_w_field | As the WSV. |
Definition at line 383 of file rte.cc.
References Ppath::gp_lat, Ppath::gp_lon, Ppath::gp_p, interp_atmfield_by_itw(), interp_atmfield_gp2itw(), interpweights(), itw2p(), joker, ConstTensor4View::nbooks(), Ppath::np, ConstTensor3View::npages(), ns, Vector::resize(), and Matrix::resize().
Referenced by iyBeerLambertStandardClearsky(), iyBeerLambertStandardCloudbox(), iyEmissionStandardClearsky(), iyEmissionStandardClearskyBasic(), and iyFOS().
void get_ppath_cloudrtvars | ( | Workspace & | ws, |
Tensor3 & | ppath_asp_abs_vec, | ||
Tensor4 & | ppath_asp_ext_mat, | ||
Tensor3 & | ppath_pnd_abs_vec, | ||
Tensor4 & | ppath_pnd_ext_mat, | ||
Tensor4 & | ppath_transmission, | ||
Tensor3 & | total_transmission, | ||
Matrix & | ppath_emission, | ||
Array< ArrayOfSingleScatteringData > & | scat_data, | ||
const Agenda & | abs_scalar_gas_agenda, | ||
const Agenda & | emission_agenda, | ||
const Agenda & | opt_prop_gas_agenda, | ||
const Ppath & | ppath, | ||
ConstVectorView | ppath_p, | ||
ConstVectorView | ppath_t, | ||
ConstMatrixView | ppath_vmr, | ||
ConstVectorView | ppath_wind_u, | ||
ConstVectorView | ppath_wind_v, | ||
ConstVectorView | ppath_wind_w, | ||
ConstMatrixView | ppath_pnd, | ||
const Index & | use_mean_scat_data, | ||
const ArrayOfSingleScatteringData & | scat_data_raw, | ||
const Index & | stokes_dim, | ||
ConstVectorView | f_grid, | ||
const Index & | atmosphere_dim, | ||
const Index & | emission_do, | ||
const Verbosity & | verbosity | ||
) |
get_ppath_cloudrtvars
Determines variables for each step of "standard" RT integration
See code for details about dimensions etc.
ws | Out: The workspace |
ppath_asp_abs_vec | Out: Absorption vectors for absorption species |
ppath_asp_ext_vec | Out: Extinction matrices for absorption species |
ppath_pnd_abs_vec | Out: Absorption vectors for particles |
ppath_pnd_ext_vec | Out: Extinction matrices for particles |
ppath_transmission | Out: Transmissions of each ppath step |
total_transmission | Out: Total transmission of path |
ppath_emission | Out: Emission source term at each ppath point |
scat_data | Out: Extracted scattering data. Length of array affected by use_mean_scat_data. |
abs_scalar_gas_agenda | As the WSV. |
emission_agenda | As the WSV. |
opt_prop_gas_agenda | As the WSV. |
ppath_p | Pressure for each ppath point. |
ppath_t | Temperature for each ppath point. |
ppath_vmr | VMR values for each ppath point. |
ppath_wind_u | U-wind for each ppath point. |
ppath_wind_v | V-wind for each ppath point. |
ppath_wind_w | W-wind for each ppath point. |
ppath_pnd | Particle number densities for each ppath point. |
use_mean_scat_data | As the WSV. |
scat_data_raw | As the WSV. |
stokes_dim | As the WSV. |
f_grid | As the WSV. |
atmosphere_dim | As the WSV. |
emission_do | Flag for calculation of emission. Should be set to 0 for pure transmission calculations. |
Definition at line 672 of file rte.cc.
References abs_scalar_gas_agendaExecute(), emission_agendaExecute(), ext2trans(), id_mat(), joker, Ppath::l_step, Ppath::los, mirror_los(), mult(), ConstVectorView::nelem(), Ppath::np, opt_prop_gas_agendaExecute(), opt_propCalc(), Tensor4::resize(), Tensor3::resize(), Matrix::resize(), and scat_data_monoCalc().
Referenced by iyBeerLambertStandardCloudbox(), and iyFOS().
void get_ppath_pnd | ( | Matrix & | ppath_pnd, |
const Ppath & | ppath, | ||
const Index & | atmosphere_dim, | ||
const ArrayOfIndex & | cloudbox_limits, | ||
ConstTensor4View | pnd_field | ||
) |
get_ppath_pnd
Determines particle number densities for each propgataion path point.
The output variable is sized inside the function as [ particle type, propagation path point ].
ppath_pnd | Out: PND for each ppath point. |
ppath | As the WSV. |
atmosphere_dim | As the WSV. |
pnd_field | As the WSV. |
Definition at line 479 of file rte.cc.
References Ppath::gp_lat, Ppath::gp_lon, Ppath::gp_p, interp_atmfield_by_itw(), interp_cloudfield_gp2itw(), joker, ConstTensor4View::nbooks(), Ppath::np, and Matrix::resize().
Referenced by iyBeerLambertStandardCloudbox(), and iyFOS().
void get_ppath_rtvars | ( | Workspace & | ws, |
Tensor3 & | ppath_abs_scalar, | ||
Matrix & | ppath_tau, | ||
Vector & | total_tau, | ||
Matrix & | ppath_emission, | ||
const Agenda & | abs_scalar_gas_agenda, | ||
const Agenda & | emission_agenda, | ||
const Ppath & | ppath, | ||
ConstVectorView | ppath_p, | ||
ConstVectorView | ppath_t, | ||
ConstMatrixView | ppath_vmr, | ||
ConstVectorView | ppath_wind_u, | ||
ConstVectorView | ppath_wind_v, | ||
ConstVectorView | ppath_wind_w, | ||
ConstVectorView | f_grid, | ||
const Index & | atmosphere_dim, | ||
const Index & | emission_do | ||
) |
get_ppath_rtvars
Determines variables for each step of "standard" RT integration
The output variables are sized inside the function. The dimension order is [ frequency, absorption species, ppath point ]
ws | Out: The workspace |
ppath_abs_sclar | Out: Absorption coefficients at each ppath point |
ppath_tau | Out: Optical thickness of each ppath step |
total_tau | Out: Total optical thickness of path |
ppath_emission | Out: Emission source term at each ppath point |
abs_scalar_gas_agenda | As the WSV. |
emission_agenda | As the WSV. |
ppath_p | Pressure for each ppath point. |
ppath_t | Temperature for each ppath point. |
ppath_vmr | VMR values for each ppath point. |
ppath_wind_u | U-wind for each ppath point. |
ppath_wind_v | V-wind for each ppath point. |
ppath_wind_w | W-wind for each ppath point. |
f_grid | As the WSV. |
atmosphere_dim | As the WSV. |
emission_do | Flag for calculation of emission. Should be set to 0 for pure transmission calculations. |
Definition at line 531 of file rte.cc.
References abs_scalar_gas_agendaExecute(), DEG2RAD, emission_agendaExecute(), joker, Ppath::l_step, Ppath::los, ConstVectorView::nelem(), Ppath::np, ConstMatrixView::nrows(), PI, Vector::resize(), Tensor3::resize(), Matrix::resize(), and SPEED_OF_LIGHT.
Referenced by iyBeerLambertStandardClearsky(), iyEmissionStandardClearsky(), and iyEmissionStandardClearskyBasic().
get_rowindex_for_mblock
Returns the "range" of y corresponding to a measurement block
sensor_response | As the WSV. |
imblock | Index of the measurement block. |
Definition at line 861 of file rte.cc.
References Sparse::nrows().
Referenced by jacobianCalcAbsSpeciesPerturbations(), jacobianCalcFreqShiftAndStretchInterp(), jacobianCalcPointingZaInterp(), jacobianCalcPointingZaRecalc(), jacobianCalcPolyfit(), jacobianCalcTemperaturePerturbations(), and yCalc().
void iy_transmission_for_scalar_tau | ( | Tensor3 & | iy_transmission, |
const Index & | stokes_dim, | ||
ConstVectorView | tau | ||
) |
iy_transmission_for_scalar_tau
Sets iy_transmission to match scalar optical thicknesses.
iy_transmission* is sized by the function.
iy_transmission | Out: As the WSV. |
stokes_dim | As the WSV. |
tau | Vector with the optical thickness for each frequency. |
Definition at line 885 of file rte.cc.
References ConstVectorView::nelem(), and Tensor3::resize().
Referenced by iyBeerLambertStandardClearsky(), and iyEmissionStandardClearsky().
void iy_transmission_mult | ( | Tensor3 & | iy_trans_new, |
ConstTensor3View | iy_transmission, | ||
ConstTensor3View | trans | ||
) |
iy_transmission_mult
Multiplicates iy_transmission with (vector) transmissions.
That is, a multiplication of iy_transmission with another variable having same structure and holding transmission values.
The "new path" is assumed to be further away from the sensor than the propagtion path already included in iy_transmission. That is, the operation can be written as:
Ttotal = Told * Tnew
where Told is the transmission corresponding to iy_transmission and Tnew corresponds to tau.
iy_trans_new* is sized by the function.
iy_trans_new | Out: Updated version of iy_transmission |
iy_transmission | As the WSV. |
trans | A variable matching *iy_transmission. |
Definition at line 929 of file rte.cc.
References joker, mult(), ConstTensor3View::ncols(), ConstTensor3View::npages(), ConstTensor3View::nrows(), ns, and Tensor3::resize().
Referenced by get_iy_of_background(), iyBeerLambertStandardCloudbox(), and iyFOS().
void iy_transmission_mult_scalar_tau | ( | Tensor3 & | iy_trans_new, |
ConstTensor3View | iy_transmission, | ||
ConstVectorView | tau | ||
) |
iy_transmission_mult_scalar_tau
Multiplicates iy_transmission with scalar optical thicknesses.
The functions can incorporate the transmission of a clear-sky path. That is, the transmission can be described by a single value The transmission of this path is gives as the optical depth for each frequency.
The "new path" is assumed to be further away from the sensor than the propagtion path already included in iy_transmission. That is, the operation can be written as:
Ttotal = Told * Tnew
where Told is the transmission corresponding to iy_transmission and Tnew corresponds to tau.
iy_trans_new* is sized by the function.
iy_trans_new | Out: Updated version of iy_transmission |
iy_transmission | As the WSV. |
tau | Vector with the optical thickness for each frequency. |
Definition at line 981 of file rte.cc.
References joker, ConstTensor3View::ncols(), ConstVectorView::nelem(), ConstTensor3View::npages(), and ConstTensor3View::nrows().
Referenced by iyBeerLambertStandardClearsky(), and iyEmissionStandardClearsky().
void mirror_los | ( | Vector & | los_mirrored, |
ConstVectorView | los, | ||
const Index & | atmosphere_dim | ||
) |
mirror_los
Determines the backward direction for a given line-of-sight.
This function can be used to get the LOS to apply for extracting single scattering properties, if the propagation path LOS is given.
A viewing direction of aa=0 is assumed for 1D. This corresponds to positive za for 2D.
los_mirrored | Out: The line-of-sight for reversed direction. |
los | A line-of-sight |
atmosphere_dim | As the WSV. |
Definition at line 1016 of file rte.cc.
References Vector::resize().
Referenced by get_ppath_cloudrtvars(), and iyFOS().
void rte_step_std | ( | VectorView | stokes_vec, |
MatrixView | trans_mat, | ||
ConstMatrixView | ext_mat_av, | ||
ConstVectorView | abs_vec_av, | ||
ConstVectorView | sca_vec_av, | ||
const Numeric & | l_step, | ||
const Numeric & | rte_planck_value | ||
) |
rte_step_std
Solves monochromatic VRTE for an atmospheric slab with constant conditions.
The function can be used for clearsky and cloudbox calculations.
The function is best explained by considering a homogenous layer. That is, the physical conditions inside the layer are constant. In reality they are not constant, so in practical all coefficients have to be averaged before calling this function. Total extinction and absorption inside the layer are described by ext_mat_av* and abs_vec_av respectively, the blackbdody radiation of the layer is given by rte_planck_value and the propagation path length through the layer is l_step.
There is an additional scattering source term in the VRTE, the scattering integral term. For this function a constant scattering term is assumed. The radiative transfer step is only a part the iterative solution of the scattering problem, for more information consider AUG. In the clearsky case this variable has to be set to 0.
When calling the function, the vector stokes_vec shall contain the Stokes vector for the incoming radiation. The function returns this vector, then containing the outgoing radiation on the other side of the layer.
The function performs the calculations differently depending on the conditions to improve the speed. There are three cases:
stokes_vec | Input/Output: A Stokes vector. |
trans_mat | Input/Output: Transmission matrix of slab. |
ext_mat_av | Input: Averaged extinction matrix. |
abs_vec_av | Input: Averaged absorption vector. |
sca_vec_av | Input: averaged scattering vector. |
l_step | Input: The length of the RTE step. |
rte_planck_value | Input: Blackbody radiation. |
Definition at line 1092 of file rte.cc.
References id_mat(), is_diagonal(), is_singular(), is_size(), lubacksub(), ludcmp(), matrix_exp(), mult(), ConstVectorView::nelem(), and q.
Referenced by cloud_ppath_update1D_planeparallel(), cloud_RT_no_background(), and iyFOS().
void surface_calc | ( | Matrix & | iy, |
const Tensor3 & | I, | ||
const Matrix & | surface_los, | ||
const Tensor4 & | surface_rmatrix, | ||
const Matrix & | surface_emission | ||
) |
surface_calc
Weights together downwelling radiation and surface emission.
iy* must have correct size when function is called.
iy | In/Out: Radiation matrix, amtching the WSV with the same name. |
I | Input: Downwelling radiation, with dimensions matching: (surface_los, f_grid, stokes_dim) |
surface_los | Input: As the WSV with the same name. |
surface_rmatrix | Input: As the WSV with the same name. |
surface_emission | Input: As the WSV with the same name. |
Definition at line 1245 of file rte.cc.
References joker, mult(), ConstTensor3View::ncols(), ConstMatrixView::nrows(), and ConstTensor3View::nrows().
Referenced by get_iy_of_background().
void trans_step_std | ( | VectorView | stokes_vec, |
MatrixView | trans_mat, | ||
ConstMatrixView | ext_mat_av, | ||
const Numeric & | l_step | ||
) |
trans_step_std
Solves monochromatic (vector) Beer-Lambert for one step
The function can be used for clearsky and cloudbox calculations.
(As rte_step_std, but without emission and scattering source term)
When calling the function, the vector stokes_vec shall contain the Stokes vector for the incoming radiation. The function returns this vector, then containing the outgoing radiation on the other side of the layer.
Transmission calculated by ext2trans.
stokes_vec | Input/Output: A Stokes vector. |
trans_mat | Input/Output: Transmission matrix of slab. |
ext_mat | Input: Averaged extinction matrix. |
l_step | Input: The length of the RTE step. |
Definition at line 1300 of file rte.cc.
References ext2trans(), and mult().
|
extern |
|
extern |
Referenced by get_ppath_rtvars().
|
extern |
Referenced by get_ppath_rtvars().
|
extern |
|
extern |
|
extern |
Referenced by apply_y_unit(), apply_y_unit2(), and get_ppath_rtvars().