ARTS 2.5.9 (git: 825fa5f2)
transmissionmatrix.h File Reference

Stuff related to the transmission matrix. More...

#include <Eigen/Dense>
#include "jacobian.h"
#include "propagationmatrix.h"

Go to the source code of this file.

Classes

struct  TransmissionMatrix
 Class to keep track of Transmission Matrices for Stokes Dim 1-4. More...
 
struct  RadiationVector
 Radiation Vector for Stokes dimension 1-4. More...
 

Macros

#define a   vec[0]
 
#define b   vec[1]
 
#define c   vec[2]
 
#define d   vec[3]
 
#define u   vec[N]
 
#define v   vec[5]
 
#define w   vec[6]
 
#define a   vec[0]
 
#define b   vec[1]
 
#define c   vec[2]
 
#define d   vec[3]
 
#define u   vec[N]
 
#define v   vec[5]
 
#define w   vec[6]
 

Typedefs

using ArrayOfTransmissionMatrix = Array< TransmissionMatrix >
 
using ArrayOfArrayOfTransmissionMatrix = Array< ArrayOfTransmissionMatrix >
 
using ArrayOfArrayOfArrayOfTransmissionMatrix = Array< ArrayOfArrayOfTransmissionMatrix >
 
using ArrayOfRadiationVector = Array< RadiationVector >
 
using ArrayOfArrayOfRadiationVector = Array< ArrayOfRadiationVector >
 
using ArrayOfArrayOfArrayOfRadiationVector = Array< ArrayOfArrayOfRadiationVector >
 

Enumerations

enum class  BackscatterSolver { CommutativeTransmission , FullTransmission }
 Intended to hold various backscatter solvers. More...
 
enum class  CumulativeTransmission { Forward , Reverse }
 Intended to hold various ways to accumulate the transmission matrix. More...
 
enum class  RadiativeTransferSolver { Emission , Transmission , LinearWeightedEmission }
 Intended to hold various forward solvers. More...
 

Functions

template<int N>
Eigen::Matrix< Numeric, N, Nprop_matrix (const ConstVectorView &vec)
 
template<int N>
Eigen::Matrix< Numeric, N, Nprop_matrix (const ConstMatrixView &m)
 
template<int N>
Eigen::Matrix< Numeric, N, Ninv_prop_matrix (const ConstVectorView &vec)
 
LazyScale< TransmissionMatrixoperator* (const TransmissionMatrix &tm, const Numeric &x)
 Lazy scale of Transmission Matrix. More...
 
LazyScale< TransmissionMatrixoperator* (const Numeric &x, const TransmissionMatrix &tm)
 Lazy scale of Transmission Matrix. More...
 
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. More...
 
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. More...
 
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. More...
 
ArrayOfTransmissionMatrix cumulative_transmission (const ArrayOfTransmissionMatrix &T, const CumulativeTransmission type)
 Accumulate the transmission matrix over all layers. More...
 
void set_backscatter_radiation_vector (ArrayOfRadiationVector &I, ArrayOfArrayOfArrayOfRadiationVector &dI, const RadiationVector &I_incoming, const ArrayOfTransmissionMatrix &T, const ArrayOfTransmissionMatrix &PiTf, const ArrayOfTransmissionMatrix &PiTr, const ArrayOfTransmissionMatrix &Z, const ArrayOfArrayOfTransmissionMatrix &dT1, const ArrayOfArrayOfTransmissionMatrix &dT2, const ArrayOfArrayOfTransmissionMatrix &dZ, const BackscatterSolver solver)
 Set the backscatter radiation vector. More...
 
ArrayOfTransmissionMatrix bulk_backscatter (const ConstTensor5View &Pe, const ConstMatrixView &pnd)
 Bulk back-scattering. More...
 
ArrayOfArrayOfTransmissionMatrix bulk_backscatter_derivative (const ConstTensor5View &Pe, const ArrayOfMatrix &dpnd_dx)
 Derivatives of bulk back-scattering
More...
 

Detailed Description

Stuff related to the transmission matrix.

Author
Richard Larsson
Date
2018-01-30

Using Eigen library to speed up computations.

Definition in file transmissionmatrix.h.

Macro Definition Documentation

◆ a [1/2]

#define a   vec[0]

◆ a [2/2]

#define a   vec[0]

◆ b [1/2]

#define b   vec[1]

◆ b [2/2]

#define b   vec[1]

◆ c [1/2]

#define c   vec[2]

◆ c [2/2]

#define c   vec[2]

◆ d [1/2]

#define d   vec[3]

◆ d [2/2]

#define d   vec[3]

◆ u [1/2]

#define u   vec[N]

◆ u [2/2]

#define u   vec[N]

◆ v [1/2]

#define v   vec[5]

◆ v [2/2]

#define v   vec[5]

◆ w [1/2]

#define w   vec[6]

◆ w [2/2]

#define w   vec[6]

Typedef Documentation

◆ ArrayOfArrayOfArrayOfRadiationVector

◆ ArrayOfArrayOfArrayOfTransmissionMatrix

◆ ArrayOfArrayOfRadiationVector

◆ ArrayOfArrayOfTransmissionMatrix

◆ ArrayOfRadiationVector

◆ ArrayOfTransmissionMatrix

Enumeration Type Documentation

◆ BackscatterSolver

enum class BackscatterSolver
strong

Intended to hold various backscatter solvers.

Enumerator
CommutativeTransmission 
FullTransmission 

Definition at line 797 of file transmissionmatrix.h.

◆ CumulativeTransmission

enum class CumulativeTransmission
strong

Intended to hold various ways to accumulate the transmission matrix.

Enumerator
Forward 
Reverse 

Definition at line 803 of file transmissionmatrix.h.

◆ RadiativeTransferSolver

enum class RadiativeTransferSolver
strong

Intended to hold various forward solvers.

Enumerator
Emission 
Transmission 
LinearWeightedEmission 

Definition at line 809 of file transmissionmatrix.h.

Function Documentation

◆ bulk_backscatter()

ArrayOfTransmissionMatrix bulk_backscatter ( const ConstTensor5View Pe,
const ConstMatrixView pnd 
)

Bulk back-scattering.

Sums up the back-scattering per element with particle number densities.

Below ns is Stokes dim, nf the number of frequencies, np number of atmospheric positions, and ne the number of scattering elements.

Parameters
PeBack-scattering on scattering element basis (ne,np,nf,ns,ns)
pndParticle number densities (ne,np)
Returns
ArrayOfTransmissionMatrix Bulk back-scattering matrices

Definition at line 2188 of file transmissionmatrix.cc.

References joker, ConstTensor5View::nbooks(), ConstTensor5View::ncols(), ConstTensor5View::npages(), and ConstTensor5View::nshelves().

Referenced by iyRadarSingleScat().

◆ bulk_backscatter_derivative()

ArrayOfArrayOfTransmissionMatrix bulk_backscatter_derivative ( const ConstTensor5View Pe,
const ArrayOfMatrix dpnd_dx 
)

Derivatives of bulk back-scattering

Below ns is Stokes dim, nf the number of frequencies, np number of atmospheric positions, and ne the number of scattering elements.

Parameters
PeBack-scattering on scattering element basis (ne,np,nf,ns,ns)
dpnd_dxDerivatives of pnd with respect to Jacobian quantities
Returns
ArrayOfTArrayOfTransmissionMatrix Derivatives of bulk back-scattering

Definition at line 2230 of file transmissionmatrix.cc.

References joker, ConstTensor5View::nbooks(), ConstTensor5View::ncols(), Array< base >::nelem(), ConstTensor5View::npages(), and ConstTensor5View::nshelves().

Referenced by iyRadarSingleScat().

◆ cumulative_transmission()

ArrayOfTransmissionMatrix cumulative_transmission ( const ArrayOfTransmissionMatrix T,
const CumulativeTransmission  type 
)

Accumulate the transmission matrix over all layers.

Parameters
[in]TTransmission matrix through all layers
[in]typeType of accumulation to target
Returns
ArrayOfTransmissionMatrix Transmission to target

Definition at line 2001 of file transmissionmatrix.cc.

References Forward, mul(), Array< base >::nelem(), and Reverse.

Referenced by emission_from_propmat_field(), iyClearsky(), iyEmissionHybrid(), iyEmissionStandard(), iyRadarSingleScat(), iyTransmissionStandard(), and test_transmat_to_cumulativetransmat().

◆ inv_prop_matrix()

template<int N>
Eigen::Matrix< Numeric, N, N > inv_prop_matrix ( const ConstVectorView vec)

Definition at line 99 of file transmissionmatrix.h.

References a, b, c, d, N, u, v, and w.

◆ operator*() [1/2]

LazyScale< TransmissionMatrix > operator* ( const Numeric x,
const TransmissionMatrix tm 
)

Lazy scale of Transmission Matrix.

Parameters
[in]xScale
[in]tmTransmission Matrix
Returns
Lazy Transmission Matrix

Definition at line 199 of file transmissionmatrix.cc.

◆ operator*() [2/2]

LazyScale< TransmissionMatrix > operator* ( const TransmissionMatrix tm,
const Numeric x 
)

Lazy scale of Transmission Matrix.

Parameters
[in]tmTransmission Matrix
[in]xScale
Returns
Lazy Transmission Matrix

Definition at line 194 of file transmissionmatrix.cc.

◆ prop_matrix() [1/2]

template<int N>
Eigen::Matrix< Numeric, N, N > prop_matrix ( const ConstMatrixView m)

Definition at line 79 of file transmissionmatrix.h.

References N.

◆ prop_matrix() [2/2]

template<int N>
Eigen::Matrix< Numeric, N, N > prop_matrix ( const ConstVectorView vec)

Definition at line 51 of file transmissionmatrix.h.

References a, b, c, d, N, u, v, and w.

◆ set_backscatter_radiation_vector()

void set_backscatter_radiation_vector ( ArrayOfRadiationVector I,
ArrayOfArrayOfArrayOfRadiationVector dI,
const RadiationVector I_incoming,
const ArrayOfTransmissionMatrix T,
const ArrayOfTransmissionMatrix PiTf,
const ArrayOfTransmissionMatrix PiTr,
const ArrayOfTransmissionMatrix Z,
const ArrayOfArrayOfTransmissionMatrix dT1,
const ArrayOfArrayOfTransmissionMatrix dT2,
const ArrayOfArrayOfTransmissionMatrix dZ,
const BackscatterSolver  solver 
)

Set the backscatter radiation vector.

Parameters
[in,out]IRadiation vector of all layers
[in,out]dIRadiation vector derivative of all layers
[in]I_incomingIncoming radiation vector
[in]TTransmission matrix of all layers
[in]PiTfForwards accumulated transmission of all layers
[in]PiTrBackwards accumulated transmission of all layers
[in]ZReflection matrix of all layers
[in]dT1Transmission matrix derivative for level 1 of all layers
[in]dT2Transmission matrix derivative for level 2 of all layers
[in]dZerivative of reflection matrix of all layers
[in]solverType of backscattering of all layers

Definition at line 2022 of file transmissionmatrix.cc.

References CommutativeTransmission, FullTransmission, and Array< base >::nelem().

Referenced by iyRadarSingleScat().

◆ stepwise_source()

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.

Parameters
[in,out]JSource vector
[in,out]dJSource vector derivatives
[in]J_addAdditional source vector
[in]KPropagation matrix
[in]aAbsorption vector
[in]SScattering source vector
[in]dKPropagation matrix derivatives
[in]daAbsorption vector derivatives
[in]dSScattering source vector derivatives
[in]BPlanck vector
[in]dB_dTPlanck vector derivative wrt temperature
[in]jacobian_quantitiesAs WSV
[in]jacobian_doDo Jacobian?

Definition at line 1803 of file transmissionmatrix.cc.

References a, PropagationMatrix::Data(), RadiationVector::Frequencies(), PropagationMatrix::IsRotational(), joker, Array< base >::nelem(), PropagationMatrix::NumberOfFrequencies(), RadiationVector::setSource(), RadiationVector::SetZero(), RadiationVector::stokes_dim, RadiationVector::Vec1(), RadiationVector::Vec2(), RadiationVector::Vec3(), and RadiationVector::Vec4().

Referenced by emission_from_propmat_field(), iyClearsky(), iyEmissionHybrid(), and iyEmissionStandard().

◆ stepwise_transmission()

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.

Parameters
[in,out]TTransmission matrix
[in,out]dT1Transmission matrix derivative wrt level 1
[in,out]dT2Transmission matrix derivative wrt level 2
[in]K1Propagation matrix wrt level 1
[in]K2Propagation matrix wrt level 2
[in]dK1Propagation matrix derivative wrt level 1
[in]dK2Propagation matrix derivative wrt level 2
[in]rDistance through layer
[in]dr_dtemp1Distance through layer derivative wrt temperature of level 1
[in]dr_dtemp2Distance through layer derivative wrt temperature of level 2
[in]temp_deriv_posPosition of derivative of temperature (-1 if not present)

Definition at line 1785 of file transmissionmatrix.cc.

References dtransmat(), Array< base >::nelem(), and transmat().

Referenced by emission_from_propmat_field(), iyClearsky(), iyEmissionHybrid(), iyEmissionStandard(), iyRadarSingleScat(), iyTransmissionStandard(), test_transmat_from_propmat(), and test_transmat_to_cumulativetransmat().

◆ update_radiation_vector()

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.

Parameters
[in,out]IRadiation vector
[in,out]dI1Radiation vector derivatives to level 1
[in,out]dI2Radiation vector derivatives to level 2
[in]J1Source vector from level 1
[in]J2Source vector from level 2
[in]dJ1Source vector derivative from level 1
[in]dJ2Source vector derivative from level 2
[in]TTransmission matrix through layer
[in]PiTAccumulated transmission matrix to space
[in]dT1Transmission matrix derivatives through layer from level 1
[in]dT2Transmission matrix derivatives through layer from level 2
[in]solverType of solver to use

Definition at line 1943 of file transmissionmatrix.cc.

References RadiationVector::add_avg(), RadiationVector::add_weighted(), ARTS_USER_ERROR_IF, Emission, joker, RadiationVector::leftMul(), LinearWeightedEmission, RadiationVector::rem_avg(), and Transmission.

Referenced by emission_from_propmat_field(), iyClearsky(), iyEmissionHybrid(), iyEmissionStandard(), and iyTransmissionStandard().