36 Index& gas_scattering_do,
37 Agenda& gas_scattering_agenda,
40 gas_scattering_do = 0;
42 gas_scattering_agenda =
Agenda(ws);
43 gas_scattering_agenda.
set_name(
"gas_scattering_agenda");
49 const Numeric& rtp_pressure,
50 const Numeric& rtp_temperature,
51 const Index& stokes_dim,
52 const Numeric& ConstXsec,
54 gas_scattering_coef = PropagationMatrix(f_grid.nelem(), stokes_dim, 1, 1, ConstXsec *
number_density(rtp_pressure, rtp_temperature));
60 const Numeric& rtp_pressure,
61 const Numeric& rtp_temperature,
62 const Index& stokes_dim,
64 static constexpr std::array coefficients{
65 3.9729066, 4.6547659e-2, 4.5055995e-4, 2.3229848e-5};
67 gas_scattering_coef = PropagationMatrix(f_grid.nelem(), stokes_dim);
69 for (Index f = 0; f < f_grid.nelem(); f++) {
73 for (
auto& coef: coefficients) {
77 gas_scattering_coef.Kjj()[f] = 1e-32 * sum /
Math::pow4(wavelen);
80 gas_scattering_coef.Kjj() *=
number_density(rtp_pressure, rtp_temperature);
85 Vector& gas_scattering_fct_legendre,
86 const Vector& gas_scattering_los_in,
87 const Vector& gas_scattering_los_out,
88 const Index& stokes_dim,
89 const Index& gas_scattering_output_type,
92 if (gas_scattering_output_type) {
93 gas_scattering_fct_legendre.resize(1);
94 gas_scattering_fct_legendre = 1.;
97 if (gas_scattering_los_in.nelem() > 0 && gas_scattering_los_out.nelem() > 0) {
100 gas_scattering_mat = sca_mat_temp;
110 Vector& gas_scattering_fct_legendre,
111 const Vector& gas_scattering_los_in,
112 const Vector& gas_scattering_los_out,
113 const Index& stokes_dim,
114 const Index& gas_scattering_output_type,
115 const Numeric& depolarization_factor,
119 "The length of the vectors of incoming and outgoing direction must be the same.")
123 if (gas_scattering_output_type) {
124 gas_scattering_fct_legendre.resize(3);
125 gas_scattering_fct_legendre = {1, 0, 0.1};
130 if (gas_scattering_los_in.nelem()>0 && gas_scattering_los_out.nelem()>0){
132 Index atmosphere_dim = 1;
133 if (gas_scattering_los_in.nelem()==2){
143 mirror_los(in_prop, gas_scattering_los_in,atmosphere_dim);
144 mirror_los(out_prop, gas_scattering_los_out,atmosphere_dim);
147 Numeric za_inc = in_prop[0];
148 Numeric za_sca = out_prop[0];
152 if (atmosphere_dim==3){
154 aa_sca = out_prop[1];
157 Numeric theta_rad =
scat_angle(za_sca, aa_sca, za_inc, aa_inc);
163 Matrix pha_mat(stokes_dim, stokes_dim, 0.0);
167 (1 - depolarization_factor) / (1 + 0.5 * depolarization_factor);
168 Numeric delta_prime =
169 (1 - 2 * depolarization_factor) / (1 - depolarization_factor);
170 Vector depol(6, 0.0);
172 switch (stokes_dim) {
175 pha_mat_int[5] *= delta_prime;
180 pha_mat_int += depol;
185 gas_scattering_los_out[0],
186 gas_scattering_los_out[1],
187 gas_scattering_los_in[0],
188 gas_scattering_los_in[1],
193 gas_scattering_mat = sca_mat_temp;
Declarations for agendas.
void set_name(const String &nname)
Set agenda name.
#define ARTS_USER_ERROR_IF(condition,...)
Vector calc_rayleighPhaMat(const Numeric &theta_rad, const Index &stokes_dim)
Header file for functions related to gas scattering.
void gas_scatteringOff(Workspace &ws, Index &gas_scattering_do, Agenda &gas_scattering_agenda, const Verbosity &)
WORKSPACE METHOD: gas_scatteringOff.
void gas_scattering_coefXsecConst(PropagationMatrix &gas_scattering_coef, const Vector &f_grid, const Numeric &rtp_pressure, const Numeric &rtp_temperature, const Index &stokes_dim, const Numeric &ConstXsec, const Verbosity &)
WORKSPACE METHOD: gas_scattering_coefXsecConst.
void gas_scattering_matIsotropic(TransmissionMatrix &gas_scattering_mat, Vector &gas_scattering_fct_legendre, const Vector &gas_scattering_los_in, const Vector &gas_scattering_los_out, const Index &stokes_dim, const Index &gas_scattering_output_type, const Verbosity &)
WORKSPACE METHOD: gas_scattering_matIsotropic.
void gas_scattering_matRayleigh(TransmissionMatrix &gas_scattering_mat, Vector &gas_scattering_fct_legendre, const Vector &gas_scattering_los_in, const Vector &gas_scattering_los_out, const Index &stokes_dim, const Index &gas_scattering_output_type, const Numeric &depolarization_factor, const Verbosity &)
WORKSPACE METHOD: gas_scattering_matRayleigh.
void gas_scattering_coefAirSimple(PropagationMatrix &gas_scattering_coef, const Vector &f_grid, const Numeric &rtp_pressure, const Numeric &rtp_temperature, const Index &stokes_dim, const Verbosity &)
WORKSPACE METHOD: gas_scattering_coefAirSimple.
constexpr Numeric boltzmann_constant
Boltzmann constant [J/K] From: https://en.wikipedia.org/wiki/2019_redefinition_of_SI_base_units Date:...
constexpr Numeric pi
The following mathematical constants are generated in python Decimal package by the code:
constexpr auto freq2wavelen(auto x) noexcept
Conversion from Hz to wavelength.
constexpr auto pow4(auto x) noexcept
power of four
constexpr auto pow2(auto x) noexcept
power of two
Numeric scat_angle(const Numeric &za_sca, const Numeric &aa_sca, const Numeric &za_inc, const Numeric &aa_inc)
Calculates the scattering angle.
void pha_mat_labCalc(MatrixView pha_mat_lab, ConstVectorView pha_mat_int, const Numeric &za_sca, const Numeric &aa_sca, const Numeric &za_inc, const Numeric &aa_inc, const Numeric &theta_rad)
Calculate phase matrix in laboratory coordinate system.
Scattering database structure and functions.
This file contains declerations of functions of physical character.
constexpr Numeric number_density(Numeric p, Numeric t) noexcept
number_density
void mirror_los(Vector &los_mirrored, const ConstVectorView &los, const Index &atmosphere_dim)
Determines the backward direction for a given line-of-sight.
Declaration of functions in rte.cc.
Class to keep track of Transmission Matrices for Stokes Dim 1-4.
void setIdentity()
Set to identity matrix.
Stuff related to the transmission matrix.