14#include "matpack_data.h"
23 const Index& stokes_dim,
26 const Tensor3& z_field,
27 const Tensor3& t_field,
29 const Tensor4& vmr_field,
31 const Agenda& propmat_clearsky_agenda)
33 const Index nalt = z_field.npages();
34 const Index nlat = z_field.nrows();
35 const Index nlon = z_field.ncols();
36 const Index nq = jacobian_quantities.
nelem();
37 const Index nf = f_grid.nelem();
40 "Does not support Jacobian calculations at this time");
42 "Only for stokes_dim 1 at this time.");
45 const Vector mag_field = Vector(3, 0);
46 const Vector los = Vector(2, 0);
48 ArrayOfStokesVector dS_dx(nq);
49 ArrayOfPropagationMatrix dK_dx(nq);
52 nalt, nlat, nlon, PropagationMatrix(nf, stokes_dim));
55 additional_source_field =
60#pragma omp parallel for if (not arts_omp_in_parallel()) collapse(3) \
62 for (Index i = 0; i < nalt; i++) {
63 for (Index j = 0; j < nlat; j++) {
64 for (Index k = 0; k < nlon; k++) {
65 thread_local Index itmp;
68 propmat_field(i, j, k),
69 additional_source_field(i, j, k),
73 propmat_clearsky_agenda,
79 Vector{vmr_field(joker, i, j, k)},
83 absorption_field(i, j, k) = propmat_field(i, j, k);
94 for (
size_t ip = 0; ip < propmat_field.
npages(); ip++)
95 for (
size_t ir = 0; ir < propmat_field.
nrows(); ir++)
96 for (
size_t ic = 0; ic < propmat_field.
ncols(); ic++)
97 transmat_field(ip, ir, ic) =
99 return transmat_field;
111 const Vector& f_grid,
112 const Tensor3& t_field,
115 const Agenda& iy_main_agenda,
116 const Agenda& iy_space_agenda,
117 const Agenda& iy_surface_agenda,
118 const Agenda& iy_cloudbox_agenda,
119 const Tensor3& surface_props_data,
123 const Index nf = f_grid.nelem();
124 const Index ns = propmat_field(0, 0, 0).StokesDimensions();
125 const Index np = ppath.
np;
141 PropagationMatrix K_this(nf, ns), K_past(nf, ns);
145 ArrayOfTensor3 t3tmp;
148 ArrayOfPropagationMatrix pmtmp(0);
149 ArrayOfStokesVector svtmp(0);
153 for (Index ip = 0; ip < np; ip++) {
156 K_this = propmat_field(ppath.
gp_p[ip]);
157 const StokesVector S(additional_source_field(ppath.
gp_p[ip]));
158 const StokesVector
a(absorption_field(ppath.
gp_p[ip]));
187 swap(K_past, K_this);
192 const Tensor3 iy_trans_new = tot_tra[np - 1];
218 lvl_rad[np - 1] = iy;
221 for (Index ip = np - 2; ip >= 0; ip--)
235 ArrayOfPropagationMatrix(),
236 ArrayOfPropagationMatrix(),
This can be used to make arrays out of anything.
Index nelem() const ARTS_NOEXCEPT
Creates a 3D field of a base unit.
size_t ncols() const
Number of columns.
size_t npages() const
Number of pages.
size_t nrows() const
Number of rows.
#define ARTS_USER_ERROR_IF(condition,...)
void field_of_propagation(Workspace &ws, FieldOfPropagationMatrix &propmat_field, FieldOfStokesVector &absorption_field, FieldOfStokesVector &additional_source_field, const Index &stokes_dim, const Vector &f_grid, const Vector &p_grid, const Tensor3 &z_field, const Tensor3 &t_field, const EnergyLevelMap &nlte_field, const Tensor4 &vmr_field, const ArrayOfRetrievalQuantity &jacobian_quantities, const Agenda &propmat_clearsky_agenda)
Creates a field of propagation matrices, absorption vectors, and source vectors.
FieldOfTransmissionMatrix transmat_field_calc_from_propmat_field(const FieldOfPropagationMatrix &propmat_field, const Numeric &r)
Get a field of transmission matrices from the propagation matrix field.
void emission_from_propmat_field(Workspace &ws, ArrayOfRadiationVector &lvl_rad, ArrayOfRadiationVector &src_rad, ArrayOfTransmissionMatrix &lyr_tra, ArrayOfTransmissionMatrix &tot_tra, const FieldOfPropagationMatrix &propmat_field, const FieldOfStokesVector &absorption_field, const FieldOfStokesVector &additional_source_field, const Vector &f_grid, const Tensor3 &t_field, const EnergyLevelMap &nlte_field, const Ppath &ppath, const Agenda &iy_main_agenda, const Agenda &iy_space_agenda, const Agenda &iy_surface_agenda, const Agenda &iy_cloudbox_agenda, const Tensor3 &surface_props_data, const Verbosity &verbosity)
Computes the radiation and transmission from fields of atmospheric propagation.
Implements a propagation matrix field.
Field3D< StokesVector > FieldOfStokesVector
Field3D< PropagationMatrix > FieldOfPropagationMatrix
void get_iy_of_background(Workspace &ws, Matrix &iy, ArrayOfTensor3 &diy_dx, const Tensor3 &iy_transmittance, const Index &iy_id, const Index &jacobian_do, const ArrayOfRetrievalQuantity &jacobian_quantities, const Ppath &ppath, const Vector &rte_pos2, const Index &atmosphere_dim, const EnergyLevelMap &nlte_field, const Index &cloudbox_on, const Index &stokes_dim, const Vector &f_grid, const String &iy_unit, const Tensor3 &surface_props_data, const Agenda &iy_main_agenda, const Agenda &iy_space_agenda, const Agenda &iy_surface_agenda, const Agenda &iy_cloudbox_agenda, const Index &iy_agenda_call1, const Verbosity &verbosity)
Determines iy of the "background" of a propgation path.
void get_stepwise_clearsky_propmat(Workspace &ws, PropagationMatrix &K, StokesVector &S, Index <e, ArrayOfPropagationMatrix &dK_dx, ArrayOfStokesVector &dS_dx, const Agenda &propmat_clearsky_agenda, const ArrayOfRetrievalQuantity &jacobian_quantities, const Vector &ppath_f_grid, const Vector &ppath_magnetic_field, const Vector &ppath_line_of_sight, const EnergyLevelMap &ppath_nlte, const Vector &ppath_vmrs, const Numeric &ppath_temperature, const Numeric &ppath_pressure, const bool &jacobian_do)
Gets the clearsky propgation matrix and NLTE contributions.
void get_stepwise_blackbody_radiation(VectorView B, VectorView dB_dT, const ConstVectorView &ppath_f_grid, const Numeric &ppath_temperature, const bool &do_temperature_derivative)
Get the blackbody radiation at propagation path point.
Declaration of functions in rte.cc.
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.
Header file for special_interp.cc.
The structure to describe a propagation path and releated quantities.
Index np
Number of points describing the ppath.
Vector lstep
The length between ppath points.
ArrayOfGridPos gp_p
Index position with respect to the pressure grid.
Index dim
Atmospheric dimensionality.
Radiation Vector for Stokes dimension 1-4.
Class to keep track of Transmission Matrices for Stokes Dim 1-4.
ArrayOfTransmissionMatrix cumulative_transmission(const ArrayOfTransmissionMatrix &T, const CumulativeTransmission type)
Accumulate the transmission matrix over all layers.
void stepwise_source(RadiationVector &J, ArrayOfRadiationVector &dJ, RadiationVector &J_add, const PropagationMatrix &K, const StokesVector &a, const StokesVector &S, const ArrayOfPropagationMatrix &dK, const ArrayOfStokesVector &da, const ArrayOfStokesVector &dS, const ConstVectorView &B, const ConstVectorView &dB_dT, const ArrayOfRetrievalQuantity &jacobian_quantities, const bool &jacobian_do)
Set the stepwise source.
void update_radiation_vector(RadiationVector &I, ArrayOfRadiationVector &dI1, ArrayOfRadiationVector &dI2, const RadiationVector &J1, const RadiationVector &J2, const ArrayOfRadiationVector &dJ1, const ArrayOfRadiationVector &dJ2, const TransmissionMatrix &T, const TransmissionMatrix &PiT, const ArrayOfTransmissionMatrix &dT1, const ArrayOfTransmissionMatrix &dT2, const PropagationMatrix &K1, const PropagationMatrix &K2, const ArrayOfPropagationMatrix &dK1, const ArrayOfPropagationMatrix &dK2, const Numeric r, const Vector &dr1, const Vector &dr2, const Index ia, const Index iz, const RadiativeTransferSolver solver)
Update the Radiation Vector.
void stepwise_transmission(TransmissionMatrix &T, ArrayOfTransmissionMatrix &dT1, ArrayOfTransmissionMatrix &dT2, const PropagationMatrix &K1, const PropagationMatrix &K2, const ArrayOfPropagationMatrix &dK1, const ArrayOfPropagationMatrix &dK2, const Numeric &r, const Numeric &dr_dtemp1, const Numeric &dr_dtemp2, const Index temp_deriv_pos)
Set the stepwise transmission matrix.
Stuff related to the transmission matrix.
Array< RadiationVector > ArrayOfRadiationVector
Array< TransmissionMatrix > ArrayOfTransmissionMatrix