Go to the documentation of this file.
70 const Numeric& rtp_planck_value,
71 const bool& trans_is_precalc) {
84 assert(rtp_planck_value >= 0);
98 if (!trans_is_precalc) {
100 trans_mat, lstep, ext_mat_av, 0);
105 stokes_vec[0] = stokes_vec[0] * trans_mat(0, 0) +
106 (abs_vec_av.
Kjj()[0] * rtp_planck_value + sca_vec_av[0]) /
107 ext_mat_av.
Kjj()[0] * (1 - trans_mat(0, 0));
137 source *= rtp_planck_value;
140 source[i] += sca_vec_av[i];
144 mult(
x, invK, source);
156 mult(term1, trans_mat, stokes_vec);
159 stokes_vec[i] = term1[i] + term2[i];
180 out3 <<
"Calculate scattering properties in cloudbox \n";
187 assert(ext_mat_field.
ncols() == ext_mat_field.
nrows() &&
188 ext_mat_field.
ncols() == abs_vec_field.
ncols());
193 Index Nlat_cloud = 1;
194 Index Nlon_cloud = 1;
205 for (
auto& av : abs_vec_spt_local) {
210 for (
auto& pm : ext_mat_spt_local) {
230 for (
Index scat_p_index_local = 0; scat_p_index_local < Np_cloud;
231 scat_p_index_local++) {
232 for (
Index scat_lat_index_local = 0; scat_lat_index_local < Nlat_cloud;
233 scat_lat_index_local++) {
234 for (
Index scat_lon_index_local = 0; scat_lon_index_local < Nlon_cloud;
235 scat_lon_index_local++) {
237 rtp_temperature_local =
240 rtp_temperature_local =
251 scat_lat_index_local,
252 scat_lon_index_local,
253 rtp_temperature_local,
281 scat_lat_index_local,
282 scat_lon_index_local,
286 abs_vec_field(scat_p_index_local,
287 scat_lat_index_local,
288 scat_lon_index_local,
292 scat_lat_index_local,
293 scat_lon_index_local,
305 const Index& p_index,
329 const Index& scat_za_interp,
392 cloudbox_field_mono_int,
427 cloudbox_field_mono_int,
461 const Index& p_index,
486 const Index& scat_za_interp,
549 cloudbox_field_mono_int,
588 cloudbox_field_mono_int,
617 const Index& p_index,
678 Numeric dz = (z_field_above - z_field_0);
680 lstep =
abs(dz / cos_theta);
690 for (
Index j = 0; j < N_species; j++)
698 const Vector rtp_mag_dummy(3, 0);
699 const Vector ppath_los_dummy;
710 partial_source_dummy,
757 if (out3.sufficient_priority()) {
758 vector_tmp =
abs_vec.VectorAtPosition();
759 ext_mat.MatrixAtPosition(matrix_tmp);
760 out3 <<
"-----------------------------------------\n";
761 out3 <<
"Input for radiative transfer step \n"
762 <<
"calculation inside"
765 out3 <<
"Stokes vector at intersection point: \n" << stokes_vec <<
"\n";
766 out3 <<
"lstep: ..." << lstep <<
"\n";
767 out3 <<
"------------------------------------------\n";
768 out3 <<
"Averaged coefficients: \n";
769 out3 <<
"Planck function: " << rte_planck_value <<
"\n";
770 out3 <<
"Scattering vector: " << sca_vec_av <<
"\n";
771 out3 <<
"Absorption vector: " << vector_tmp <<
"\n";
772 out3 <<
"Extinction matrix: " << matrix_tmp <<
"\n";
806 Numeric dz = (z_field_0 - z_field_below);
807 lstep =
abs(dz / cos_theta);
818 for (
Index k = 0; k < N_species; k++)
826 const Vector rtp_mag_dummy(3, 0);
827 const Vector ppath_los_dummy;
837 partial_source_dummy,
889 if (out3.sufficient_priority()) {
890 vector_tmp =
abs_vec.VectorAtPosition();
891 ext_mat.MatrixAtPosition(matrix_tmp);
892 out3 <<
"-----------------------------------------\n";
893 out3 <<
"Input for radiative transfer step \n"
894 <<
"calculation inside"
897 out3 <<
"Stokes vector at intersection point: \n" << stokes_vec <<
"\n";
898 out3 <<
"lstep: ..." << lstep <<
"\n";
899 out3 <<
"------------------------------------------\n";
900 out3 <<
"Averaged coefficients: \n";
901 out3 <<
"Planck function: " << rte_planck_value <<
"\n";
902 out3 <<
"Scattering vector: " << sca_vec_av <<
"\n";
903 out3 <<
"Absorption vector: " << vector_tmp <<
"\n";
904 out3 <<
"Extinction matrix: " << matrix_tmp <<
"\n";
928 else if (bkgr == 2) {
949 "Surface reflections inside cloud box not yet handled.");
1111 const Index& p_index,
1112 const Index& lat_index,
1113 const Index& lon_index,
1236 for (
Index i = 0; i < los_grid_aa.
nelem(); i++)
1237 los_grid_aa[i] = los_grid_aa[i] + 180.;
1247 itw_p_za, cloud_gp_p, cloud_gp_lat, cloud_gp_lon, gp_za, gp_aa);
1273 out3 <<
"Interpolate ext_mat:\n";
1300 out3 <<
"Interpolate doit_scat_field:\n";
1309 out3 <<
"Interpolate cloudbox_field_mono:\n";
1324 out3 <<
"Interpolate temperature field\n";
1343 for (
Index i = 0; i < N_species; i++) {
1344 out3 <<
"Interpolate vmr field\n";
1352 vmr_list_int(i,
joker) = vmr_int;
1358 out3 <<
"Calculate radiative transfer inside cloudbox.\n";
1368 cloudbox_field_mono_int,
1398 const Index& p_index,
1399 const Index& lat_index,
1400 const Index& lon_index,
1406 const Index N_species = vmr_list_int.
nrows();
1413 Vector rtp_vmr_local(N_species, 0.);
1430 std::swap(cur_propmat_clearsky, prev_propmat_clearsky);
1435 const Vector rtp_mag_dummy(3, 0);
1436 const Vector ppath_los_dummy;
1444 cur_propmat_clearsky,
1447 partial_source_dummy,
1456 vmr_list_int(
joker, k),
1464 for (
Index i = 0; i < prev_propmat_clearsky.
nelem(); i++) {
1465 prev_propmat_clearsky[i] += cur_propmat_clearsky[i];
1466 prev_propmat_clearsky[i] *= 0.5;
1470 ext_mat_local, abs_vec_local, prev_propmat_clearsky);
1476 sca_vec_av[i] = 0.5 * (sca_vec_int(i, k) + sca_vec_int(i, k + 1));
1483 abs_vec_int(
joker, k + 1));
1496 Numeric rte_planck_value =
planck(f, 0.5 * (t_int[k] + t_int[k + 1]));
1502 if (out3.sufficient_priority()) {
1505 out3 <<
"-----------------------------------------\n";
1506 out3 <<
"Input for radiative transfer step \n"
1507 <<
"calculation inside"
1510 out3 <<
"Stokes vector at intersection point: \n" << stokes_vec <<
"\n";
1511 out3 <<
"lstep: ..." << lstep <<
"\n";
1512 out3 <<
"------------------------------------------\n";
1513 out3 <<
"Averaged coefficients: \n";
1514 out3 <<
"Planck function: " << rte_planck_value <<
"\n";
1515 out3 <<
"Scattering vector: " << sca_vec_av <<
"\n";
1516 out3 <<
"Absorption vector: " << vector_tmp <<
"\n";
1517 out3 <<
"Extinction matrix: " << matrix_tmp <<
"\n";
1544 joker) = stokes_vec;
1600 for (
Index ilos = 0; ilos < nlos; ilos++) {
1622 const Index& accelerated,
1628 for (
Index i = 0; i < accelerated; ++i) {
1663 for (
Index p_index = 0; p_index < N_p; ++p_index) {
1678 NGA = (C1 * B2 - C2 * A2B1) / (A1 * B2 - A2B1 * A2B1);
1679 NGB = (C2 * A1 - C1 * A2B1) / (A1 * B2 - A2B1 * A2B1);
1681 if (!std::isnan(NGB) && !std::isnan(NGA)) {
1683 for (
Index p_index = 0; p_index < N_p; ++p_index) {
1714 const Index& scat_za_interp,
1756 out3 <<
"Interpolate ext_mat:\n";
1763 ext_mat_field(
joker, 0, 0, i, j),
1770 out3 <<
"Interpolate abs_vec:\n";
1772 abs_vec_int(i,
joker), itw, abs_vec_field(
joker, 0, 0, i), cloud_gp_p);
1778 out3 <<
"Interpolate doit_scat_field and cloudbox_field_mono:\n";
1779 if (scat_za_interp == 0)
1791 }
else if (scat_za_interp == 1)
1798 Tensor3 cloudbox_field_mono_int_za(
1805 out3 <<
"Interpolate cloudbox_field_mono:\n";
1813 sca_vec_int_za(i, ip,
joker),
1816 cloudbox_field_mono_int(i, ip) =
1818 cloudbox_field_mono_int_za(i, ip,
joker),
1829 out3 <<
"Interpolate temperature field\n";
1842 for (
Index i_sp = 0; i_sp < N_species; i_sp++) {
1843 out3 <<
"Interpolate vmr field\n";
1845 vmr_list_int(i_sp,
joker) = vmr_int;
1855 Matrix& cloudbox_field_opt,
1860 const Index& scat_za_interp) {
1867 Vector i_approx_interp(N_za);
1872 idx.push_back(N_za - 1);
1887 while (max_diff > acc) {
1895 for (
Index i_p = 0; i_p < N_p; i_p++) {
1896 for (
Index i_za_red = 0; i_za_red < idx.
nelem(); i_za_red++) {
1897 za_reduced[i_za_red] = za_grid_fine[idx[i_za_red]];
1898 cloudbox_field_opt(i_p, i_za_red) =
1902 gridpos(gp_za, za_reduced, za_grid_fine);
1904 if (scat_za_interp == 0 || idx.
nelem() < 3) {
1906 interp(i_approx_interp, itw, cloudbox_field_opt(i_p,
joker), gp_za);
1907 }
else if (scat_za_interp == 1) {
1908 for (
Index i_za = 0; i_za < N_za; i_za++) {
1910 cloudbox_field_opt(i_p,
joker),
1920 for (
Index i_za = 0; i_za < N_za; i_za++) {
1922 i_approx_interp[i_za]);
1923 if (diff_vec[i_za] > max_diff_za[i_p]) {
1924 max_diff_za[i_p] = diff_vec[i_za];
1929 if (max_diff_za[i_p] > max_diff_p) {
1930 max_diff_p = max_diff_za[i_p];
1939 idx.push_back(ind_za[ind_p]);
1942 i_sort.resize(idx_unsorted.
nelem());
1945 for (
Index i = 0; i < idx_unsorted.
nelem(); i++)
1946 idx[i] = idx_unsorted[i_sort[i]];
1954 za_grid_opt[i] = za_grid_fine[idx[i]];
1969 const Numeric& norm_error_threshold,
1970 const Index& norm_debug,
1973 throw runtime_error(
"Only 1D is supported here for now");
1982 throw runtime_error(
"The range of *za_grid* must [0 180].");
1988 throw runtime_error(
"The range of *aa_grid* must [0 360].");
2014 Index aa_index_local = 0;
2017 for (
Index za_index_local = 0; za_index_local < Nza;
2033 for (
Index p_index = 0;
2041 doit_scat_ext_field(p_index, 0, 0, za_index_local, 0) +=
2043 (ext_mat_field(p_index, 0, 0, 0, i) -
2044 abs_vec_field(p_index, 0, 0, i));
2050 Index corr_max_p_index = -1;
2052 for (
Index p_index = 0; p_index < Np; p_index++) {
2058 doit_scat_ext_field(p_index, 0, 0,
joker, 0),
za_grid);
2062 const Numeric corr_factor = scat_ext_int / scat_int;
2066 if (!std::isnan(corr_factor) && !std::isinf(corr_factor)) {
2067 if (
abs(corr_factor) >
abs(corr_max)) {
2068 corr_max = corr_factor;
2069 corr_max_p_index = p_index;
2072 out0 <<
" DOIT corr_factor: " << 1. - corr_factor
2073 <<
" ( scat_ext_int: " << scat_ext_int
2074 <<
", scat_int: " << scat_int <<
")"
2075 <<
" at p_index " << p_index <<
"\n";
2077 if (
abs(1. - corr_factor) > norm_error_threshold) {
2079 os <<
"ERROR: DOIT correction factor exceeds threshold (="
2080 << norm_error_threshold <<
"): " << setprecision(4)
2081 << 1. - corr_factor <<
" at p_index " << p_index <<
"\n";
2082 throw runtime_error(os.str());
2083 }
else if (
abs(1. - corr_factor) > norm_error_threshold / 2.) {
2084 out0 <<
" WARNING: DOIT correction factor above threshold/2: "
2085 << 1. - corr_factor <<
" at p_index " << p_index <<
"\n";
2090 }
else if (norm_debug) {
2091 out0 <<
" DOIT corr_factor ignored: " << 1. - corr_factor
2092 <<
" ( scat_ext_int: " << scat_ext_int <<
", scat_int: " << scat_int
2094 <<
" at p_index " << p_index <<
"\n";
2099 if (corr_max_p_index != -1) {
2100 os <<
" Max. DOIT correction factor in this iteration: " << 1. - corr_max
2101 <<
" at p_index " << corr_max_p_index <<
"\n";
2103 os <<
" No DOIT correction performed in this iteration.\n";
void MatrixAtPosition(MatrixView ret, const Index iv=0, const Index iz=0, const Index ia=0) const
Sets the dense matrix.
Index atmosphere_dim(Workspace &ws) noexcept
std::size_t pos() const noexcept
StokesVector abs_vec(Workspace &ws) noexcept
Ppath ppath_step(Workspace &ws) noexcept
void compute_transmission_matrix_from_averaged_matrix_at_frequency(MatrixView T, const Numeric &r, const PropagationMatrix &averaged_propagation_matrix, const Index iv, const Index iz, const Index ia)
Compute the matrix exponent as the transmission matrix of this propagation matrix.
Tensor3 z_field(Workspace &ws) noexcept
void rte_step_doit_replacement(VectorView stokes_vec, MatrixView trans_mat, const PropagationMatrix &ext_mat_av, const StokesVector &abs_vec_av, ConstVectorView sca_vec_av, const Numeric &lstep, const Numeric &rtp_planck_value, const bool &trans_is_precalc)
Solves monochromatic VRTE for an atmospheric slab with constant conditions.
void ppath_init_structure(Ppath &ppath, const Index &atmosphere_dim, const Index &np)
Initiates a Ppath structure to hold the given number of points.
PropagationMatrix PropagationMatrix
Stokes vector is as Propagation matrix but only has 4 possible values.
Agenda ppath_step_agenda(Workspace &ws) noexcept
Tensor6 doit_scat_field(Workspace &ws) noexcept
Numeric interp_poly(ConstVectorView x, ConstVectorView y, const Numeric &x_i, const GridPos &gp)
Polynomial interpolation.
void gridpos(ArrayOfGridPos &gp, ConstVectorView old_grid, ConstVectorView new_grid, const Numeric &extpolfac)
Set up a grid position Array.
void id_mat(MatrixView I)
Identity Matrix.
void itw2p(VectorView p_values, ConstVectorView p_grid, const ArrayOfGridPos &gp, ConstMatrixView itw)
Converts interpolation weights to pressures.
Index ncols() const
Returns the number of columns.
Vector lat_grid(Workspace &ws) noexcept
Tensor4 surface_rmatrix(Workspace &ws) noexcept
Tensor4 pnd_field(Workspace &ws) noexcept
Numeric interp(ConstVectorView itw, ConstVectorView a, const GridPos &tc)
Red 1D Interpolate.
invlib::Matrix< ArtsMatrix > Matrix
invlib wrapper type for ARTS matrices.
Verbosity verbosity(Workspace &ws) noexcept
void MatrixInverseAtPosition(MatrixView ret, const Index iv=0, const Index iz=0, const Index ia=0) const
Return the matrix inverse at the position.
void mult(ComplexVectorView y, const ConstComplexMatrixView &M, const ConstComplexVectorView &x)
Matrix-Vector Multiplication.
void opt_prop_bulkCalc(PropagationMatrix &ext_mat, StokesVector &abs_vec, const ArrayOfPropagationMatrix &ext_mat_spt, const ArrayOfStokesVector &abs_vec_spt, const Tensor4 &pnd_field, const Index &scat_p_index, const Index &scat_lat_index, const Index &scat_lon_index, const Verbosity &)
WORKSPACE METHOD: opt_prop_bulkCalc.
void swap(ComplexVector &v1, ComplexVector &v2)
Swaps two objects.
Index f_index(Workspace &ws) noexcept
ArrayOfIndex cloudbox_limits(Workspace &ws) noexcept
void resize(Index n)
Resize function.
void cloud_ppath_update1D_noseq(Workspace &ws, Tensor6View cloudbox_field_mono, const Index &p_index, const Index &za_index, ConstVectorView za_grid, const ArrayOfIndex &cloudbox_limits, ConstTensor6View cloudbox_field_mono_old, ConstTensor6View doit_scat_field, const Agenda &propmat_clearsky_agenda, ConstTensor4View vmr_field, const Agenda &ppath_step_agenda, const Numeric &ppath_lmax, const Numeric &ppath_lraytrace, ConstVectorView p_grid, ConstTensor3View z_field, ConstVectorView refellipsoid, ConstTensor3View t_field, ConstVectorView f_grid, const Index &f_index, ConstTensor5View ext_mat_field, ConstTensor4View abs_vec_field, const Agenda &surface_rtprop_agenda, const Index &scat_za_interp, const Verbosity &verbosity)
Calculation of radiation field along a propagation path step for specified zenith direction and press...
bool is_singular(ConstMatrixView A)
Checks if a square matrix is singular.
Radiative transfer in cloudbox.
Vector rtp_vmr(Workspace &ws) noexcept
Index za_index(Workspace &ws) noexcept
Index stokes_dim(Workspace &ws) noexcept
Index nrows() const
Returns the number of rows.
Array< RetrievalQuantity > ArrayOfRetrievalQuantity
Tensor6 cloudbox_field_mono(Workspace &ws) noexcept
Matrix iy(Workspace &ws) noexcept
This file contains the definition of Array.
void cloud_ppath_update1D(Workspace &ws, Tensor6View cloudbox_field_mono, const Index &p_index, const Index &za_index, ConstVectorView za_grid, const ArrayOfIndex &cloudbox_limits, ConstTensor6View doit_scat_field, const Agenda &propmat_clearsky_agenda, ConstTensor4View vmr_field, const Agenda &ppath_step_agenda, const Numeric &ppath_lmax, const Numeric &ppath_lraytrace, ConstVectorView p_grid, ConstTensor3View z_field, ConstVectorView refellipsoid, ConstTensor3View t_field, ConstVectorView f_grid, const Index &f_index, ConstTensor5View ext_mat_field, ConstTensor4View abs_vec_field, const Agenda &surface_rtprop_agenda, const Index &scat_za_interp, const Verbosity &verbosity)
Calculates radiation field along a propagation path step for specified zenith direction and pressure ...
bool is_size(ConstVectorView x, const Index &n)
Verifies that the size of x is l.
The structure to describe a propagation path and releated quantities.
Agenda surface_rtprop_agenda(Workspace &ws) noexcept
void AddAverageAtPosition(ConstMatrixView mat1, ConstMatrixView mat2, const Index iv=0, const Index iz=0, const Index ia=0)
Add the average of the two input at position.
A constant view of a Tensor4.
This can be used to make arrays out of anything.
void za_gridOpt(Vector &za_grid_opt, Matrix &cloudbox_field_opt, ConstVectorView za_grid_fine, ConstTensor6View cloudbox_field_mono, const Numeric &acc, const Index &scat_za_interp)
Optimize the zenith angle grid.
void get_sorted_indexes(ArrayOfIndex &sorted, const T &data)
get_sorted_indexes
void interp_cloud_coeff1D(Tensor3View ext_mat_int, MatrixView abs_vec_int, MatrixView sca_vec_int, MatrixView cloudbox_field_mono_int, VectorView t_int, MatrixView vmr_list_int, VectorView p_int, ConstTensor5View ext_mat_field, ConstTensor4View abs_vec_field, ConstTensor6View doit_scat_field, ConstTensor6View cloudbox_field_mono, ConstTensor3View t_field, ConstTensor4View vmr_field, ConstVectorView p_grid, const Ppath &ppath_step, const ArrayOfIndex &cloudbox_limits, ConstVectorView za_grid, const Index &scat_za_interp, const Verbosity &verbosity)
Interpolate all inputs of the VRTE on a propagation path step.
Declarations for agendas.
Declarations having to do with the four output streams.
Vector rte_pos(Workspace &ws) noexcept
void gridpos_upperend_check(GridPos &gp, const Index &ie)
gridpos_upperend_check
Index nelem() const
Returns the number of elements.
void surface_rtprop_agendaExecute(Workspace &ws, Numeric &surface_skin_t, Matrix &surface_emission, Matrix &surface_los, Tensor4 &surface_rmatrix, const Vector &f_grid, const Vector &rtp_pos, const Vector &rtp_los, const Agenda &input_agenda)
bool is_inside_cloudbox(const Ppath &ppath_step, const ArrayOfIndex &cloudbox_limits, const bool include_boundaries)
void cloud_ppath_update3D(Workspace &ws, Tensor6View cloudbox_field_mono, const Index &p_index, const Index &lat_index, const Index &lon_index, const Index &za_index, const Index &aa_index, ConstVectorView za_grid, ConstVectorView aa_grid, const ArrayOfIndex &cloudbox_limits, ConstTensor6View doit_scat_field, const Agenda &propmat_clearsky_agenda, ConstTensor4View vmr_field, const Agenda &ppath_step_agenda, const Numeric &ppath_lmax, const Numeric &ppath_lraytrace, ConstVectorView p_grid, ConstVectorView lat_grid, ConstVectorView lon_grid, ConstTensor3View z_field, ConstVectorView refellipsoid, ConstTensor3View t_field, ConstVectorView f_grid, const Index &f_index, ConstTensor5View ext_mat_field, ConstTensor4View abs_vec_field, const Index &, const Verbosity &verbosity)
Radiative transfer calculation along a path inside the cloudbox (3D).
Tensor4 vmr_field(Workspace &ws) noexcept
Vector rte_los(Workspace &ws) noexcept
This file contains declerations of functions of physical character.
Vector p_grid(Workspace &ws) noexcept
Index ncols() const
Returns the number of columns.
Index NumberOfFrequencies() const
The number of frequencies of the propagation matrix.
void spt_calc_agendaExecute(Workspace &ws, ArrayOfPropagationMatrix &ext_mat_spt, ArrayOfStokesVector &abs_vec_spt, const Index scat_p_index, const Index scat_lat_index, const Index scat_lon_index, const Numeric rtp_temperature, const Index za_index, const Index aa_index, const Agenda &input_agenda)
A constant view of a Tensor6.
NUMERIC Numeric
The type to use for all floating point numbers.
Linear algebra functions.
Tensor6 cloudbox_field_mono_old(Workspace &ws) noexcept
void propmat_clearsky_agendaExecute(Workspace &ws, ArrayOfPropagationMatrix &propmat_clearsky, ArrayOfStokesVector &nlte_source, ArrayOfPropagationMatrix &dpropmat_clearsky_dx, ArrayOfStokesVector &dnlte_dx_source, ArrayOfStokesVector &nlte_dsource_dx, const ArrayOfRetrievalQuantity &jacobian_quantities, const Vector &f_grid, const Vector &rtp_mag, const Vector &rtp_los, const Numeric rtp_pressure, const Numeric rtp_temperature, const EnergyLevelMap &rtp_nlte, const Vector &rtp_vmr, const Agenda &input_agenda)
Vector refellipsoid(Workspace &ws) noexcept
Vector f_grid(Workspace &ws) noexcept
PropagationMatrix ext_mat(Workspace &ws) noexcept
Stuff related to the propagation matrix.
void cloud_fieldsCalc(Workspace &ws, Tensor5View ext_mat_field, Tensor4View abs_vec_field, const Agenda &spt_calc_agenda, const Index &za_index, const Index &aa_index, const ArrayOfIndex &cloudbox_limits, ConstTensor3View t_field, ConstTensor4View pnd_field, const Verbosity &verbosity)
Calculate ext_mat, abs_vec for all points inside the cloudbox for one.
void resize(Index r, Index c)
Resize function.
Numeric AngIntegrate_trapezoid(ConstMatrixView Integrand, ConstVectorView za_grid, ConstVectorView aa_grid)
AngIntegrate_trapezoid.
Vector za_grid(Workspace &ws) noexcept
Matrix surface_emission(Workspace &ws) noexcept
Numeric rtp_pressure(Workspace &ws) noexcept
Vector lon_grid(Workspace &ws) noexcept
Numeric ppath_lmax(Workspace &ws) noexcept
A constant view of a Matrix.
Internal cloudbox functions.
Numeric ppath_lraytrace(Workspace &ws) noexcept
Numeric planck(const Numeric &f, const Numeric &t)
planck
invlib::Vector< ArtsVector > Vector
invlib wrapper type for ARTS vectors.
void ppath_step_agendaExecute(Workspace &ws, Ppath &ppath_step, const Numeric ppath_lmax, const Numeric ppath_lraytrace, const Vector &f_grid, const Agenda &input_agenda)
Index nrows() const
Returns the number of rows.
Propagation path structure and functions.
void opt_prop_sum_propmat_clearsky(PropagationMatrix &ext_mat, StokesVector &abs_vec, const ArrayOfPropagationMatrix &propmat_clearsky)
Get optical properties from propmat_clearsky.
Numeric rtp_temperature(Workspace &ws) noexcept
void cloud_ppath_update1D_planeparallel(Workspace &ws, Tensor6View cloudbox_field_mono, const Index &p_index, const Index &za_index, ConstVectorView za_grid, const ArrayOfIndex &cloudbox_limits, ConstTensor6View doit_scat_field, const Agenda &propmat_clearsky_agenda, ConstTensor4View vmr_field, ConstVectorView p_grid, ConstTensor3View z_field, ConstTensor3View t_field, ConstVectorView f_grid, const Index &f_index, ConstTensor5View ext_mat_field, ConstTensor4View abs_vec_field, const Verbosity &verbosity)
Radiative transfer calculation inside cloudbox for planeparallel case.
Header file for logic.cc.
void cloudbox_field_ngAcceleration(Tensor6 &cloudbox_field_mono, const ArrayOfTensor6 &acceleration_input, const Index &accelerated, const Verbosity &)
Convergence acceleration.
Index StokesDimensions() const
The stokes dimension of the propagation matrix.
void doit_scat_fieldNormalize(Workspace &ws, Tensor6 &doit_scat_field, const Tensor6 &cloudbox_field_mono, const ArrayOfIndex &cloudbox_limits, const Agenda &spt_calc_agenda, const Index &atmosphere_dim, const Vector &za_grid, const Vector &aa_grid, const Tensor4 &pnd_field, const Tensor3 &t_field, const Numeric &norm_error_threshold, const Index &norm_debug, const Verbosity &verbosity)
Normalization of scattered field.
Declaration of functions in rte.cc.
Tensor3 t_field(Workspace &ws) noexcept
A constant view of a Tensor3.
VectorView Kjj(const Index iz=0, const Index ia=0)
Vector view to diagonal elements.
Header file for special_interp.cc.
void AddAverageAtPosition(ConstVectorView vec1, ConstVectorView vec2, const Index iv=0, const Index iz=0, const Index ia=0)
Add the average of both inputs at position.
void cloud_RT_no_background(Workspace &ws, Tensor6View cloudbox_field_mono, const Agenda &propmat_clearsky_agenda, const Ppath &ppath_step, ConstVectorView t_int, ConstMatrixView vmr_list_int, ConstTensor3View ext_mat_int, ConstMatrixView abs_vec_int, ConstMatrixView sca_vec_int, ConstMatrixView cloudbox_field_mono_int, ConstVectorView p_int, const ArrayOfIndex &cloudbox_limits, ConstVectorView f_grid, const Index &f_index, const Index &p_index, const Index &lat_index, const Index &lon_index, const Index &za_index, const Index &aa_index, const Verbosity &verbosity)
Calculates RT in the cloudbox (1D)
Agenda propmat_clearsky_agenda(Workspace &ws) noexcept
void cloud_RT_surface(Workspace &ws, Tensor6View cloudbox_field_mono, const Agenda &surface_rtprop_agenda, ConstVectorView f_grid, const Index &f_index, const Index &stokes_dim, const Ppath &ppath_step, const ArrayOfIndex &cloudbox_limits, ConstVectorView za_grid, const Index &za_index)
Calculates RT in the cloudbox.
Vector x(Workspace &ws) noexcept
INDEX Index
The type to use for all integer numbers and indices.
Numeric surface_skin_t(Workspace &ws) noexcept
Matrix surface_los(Workspace &ws) noexcept
Index aa_index(Workspace &ws) noexcept
Index ppath_what_background(const Ppath &ppath)
Returns the case number for the radiative background.
ArrayOfPropagationMatrix propmat_clearsky(Workspace &ws) noexcept
Vector aa_grid(Workspace &ws) noexcept
A constant view of a Vector.
Contains sorting routines.
Index nelem() const
Number of elements.
StokesVector StokesVector
void interpweights(VectorView itw, const GridPos &tc)
Red 1D interpolation weights.
VectorView VectorAtPosition(const Index iv=0, const Index iz=0, const Index ia=0)
Get a vectorview to the position.
A constant view of a Tensor5.
Numeric refell2r(ConstVectorView refellipsoid, const Numeric &lat)
refell2r
Agenda spt_calc_agenda(Workspace &ws) noexcept
This file contains basic functions to handle XML data files.