ARTS 2.5.4 (git: 31ce4f0e)
propagationmatrix.cc File Reference

Stuff related to the propagation matrix. More...

#include "propagationmatrix.h"
#include "arts_omp.h"
#include "lin_alg.h"

Go to the source code of this file.

Functions

void compute_transmission_matrix (Tensor3View T, const Numeric &r, const PropagationMatrix &upper_level, const PropagationMatrix &lower_level, const Index iz, const Index ia)
 Compute the matrix exponent as the transmission matrix of this propagation matrix. More...
 
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. More...
 
void compute_transmission_matrix_and_derivative (Tensor3View T, Tensor4View dT_dx_upper_level, Tensor4View dT_dx_lower_level, const Numeric &r, const PropagationMatrix &upper_level, const PropagationMatrix &lower_level, const ArrayOfPropagationMatrix &dupper_level_dx, const ArrayOfPropagationMatrix &dlower_level_dx, const Numeric &dr_dTu, const Numeric &dr_dTl, const Index it, const Index iz, const Index ia)
 
std::ostream & operator<< (std::ostream &os, const PropagationMatrix &pm)
 
std::ostream & operator<< (std::ostream &os, const StokesVector &sv)
 

Detailed Description

Stuff related to the propagation matrix.

Author
Richard Larsson
Date
2017-06-23

The reason is that the naive approach to keep the full propagation matrix is memory intensive and slow

Definition in file propagationmatrix.cc.

Function Documentation

◆ compute_transmission_matrix()

void compute_transmission_matrix ( Tensor3View  T,
const Numeric r,
const PropagationMatrix upper_level,
const PropagationMatrix lower_level,
const Index  iz = 0,
const Index  ia = 0 
)

Compute the matrix exponent as the transmission matrix of this propagation matrix.

The propagation matrix is multiplied by -r and level-averaged before exponent is applied.

upper_level and lower_level propagation matrices should thus be the level matrices and r the distance between these levels. The same is true for the derivative matrices.

Stokes dim 1 and 4 have been tested more. Stokes dim 2 and 3 have been found to work but could still have hidden errors for uncommon cases

Parameters
[in,out]Ttransmission tensor with outmost dimension being frequency
[in]rthe distance over which the propagation matrix causes the transmission
[in]upper_levelThe upper level propagation matrix
[in]lower_levelThe lower level propagation matrix
[in]izZenith index
[in]iaAzimuth index

Definition at line 33 of file propagationmatrix.cc.

References a, a2, b, b2, c, joker, PropagationMatrix::K12(), PropagationMatrix::K13(), PropagationMatrix::K23(), PropagationMatrix::Kjj(), PropagationMatrix::NumberOfFrequencies(), sqrt(), PropagationMatrix::StokesDimensions(), and u.

◆ compute_transmission_matrix_and_derivative()

void compute_transmission_matrix_and_derivative ( Tensor3View  T,
Tensor4View  dT_upper_level,
Tensor4View  dT_lower_level,
const Numeric r,
const PropagationMatrix upper_level,
const PropagationMatrix lower_level,
const Array< PropagationMatrix > &  dprop_mat_upper_level,
const Array< PropagationMatrix > &  dprop_mat_lower_level,
const Numeric dr_dTu = 0.0,
const Numeric dr_dTl = 0.0,
const Index  it = -1,
const Index  iz = 0,
const Index  ia = 0 
)

Compute the matrix exponent as the transmission matrix of this propagation matrix

The propagation matrix is multiplied by -r and level-averaged before exponent is applied.

upper_level and lower_level propagation matrices should thus be the level matrices and r the distance between these levels. The same is true for the derivative matrices.

Stokes dim 1 and 4 have been tested more. Stokes dim 2 and 3 have been found to work but could still have hidden errors for uncommon cases

Parameters
[in,out]Ttransmission tensor with outmost dimension being frequency
[in,out]dT_upptransmission tensors derivative with respect to derivatives of the propagation matrix for upper level
[in,out]dT_lowtransmission tensors derivative with respect to derivatives of the propagation matrix for lower level
[in]rthe distance over which the propagation matrix causes the transmission
[in]upper_levelThe upper level propagation matrix
[in]lower_levelThe lower level propagation matrix
[in]dprop_mat_uppderivatives of the upper propagation matrix with respect to some parameter (is multiplied by -0.5 r)
[in]dprop_mat_lowderivatives of the lower propagation matrix with respect to some parameter (is multiplied by -0.5 r)
[in]dr_dTuDistance temperature derivative for upper level
[in]dr_dTlDistance temperature derivative for lower level
[in]itPosition of temperature derivative (ignored at -1)
[in]izZenith index
[in]iaAzimuth index

Definition at line 478 of file propagationmatrix.cc.

References a, a2, b, b2, c, joker, PropagationMatrix::K12(), PropagationMatrix::K13(), PropagationMatrix::K23(), PropagationMatrix::Kjj(), Array< base >::nelem(), PropagationMatrix::NumberOfFrequencies(), sqrt(), PropagationMatrix::StokesDimensions(), and u.

◆ compute_transmission_matrix_from_averaged_matrix_at_frequency()

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 = 0,
const Index  ia = 0 
)

Compute the matrix exponent as the transmission matrix of this propagation matrix.

The propagation matrix is multiplied by -r and level-averaged before exponent is applied.

Stokes dim 1 and 4 have been tested more. Stokes dim 2 and 3 have been found to work but could still have hidden errors for uncommon cases

Parameters
[in,out]Ttransmission matrix at the position
[in]rthe distance over which the propagation matrix causes the transmission
[in]averaged_propagation_matrixThe propagation matrix
[in]ivFrequency index
[in]izZenith index
[in]iaAzimuth index

Definition at line 272 of file propagationmatrix.cc.

References a, a2, b, b2, c, PropagationMatrix::K12(), PropagationMatrix::K13(), PropagationMatrix::K23(), PropagationMatrix::Kjj(), sqrt(), PropagationMatrix::StokesDimensions(), and u.

Referenced by rte_step_doit_replacement().

◆ operator<<() [1/2]

std::ostream & operator<< ( std::ostream &  os,
const PropagationMatrix pm 
)

Definition at line 2037 of file propagationmatrix.cc.

◆ operator<<() [2/2]

std::ostream & operator<< ( std::ostream &  os,
const StokesVector sv 
)

Definition at line 2043 of file propagationmatrix.cc.