ARTS  2.4.0(git:4fb77825)
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)
 output operator More...
 
std::ostream & operator<< (std::ostream &os, const ArrayOfPropagationMatrix &apm)
 output operator More...
 
std::ostream & operator<< (std::ostream &os, const ArrayOfArrayOfPropagationMatrix &aapm)
 output operator More...
 
std::ostream & operator<< (std::ostream &os, const StokesVector &sv)
 
std::ostream & operator<< (std::ostream &os, const ArrayOfStokesVector &asv)
 
std::ostream & operator<< (std::ostream &os, const ArrayOfArrayOfStokesVector &aasv)
 

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 joker, PropagationMatrix::K12(), PropagationMatrix::Kjj(), PropagationMatrix::NumberOfFrequencies(), and PropagationMatrix::StokesDimensions().

Referenced by get_stepwise_transmission_matrix().

◆ 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 joker, PropagationMatrix::K12(), PropagationMatrix::Kjj(), Array< base >::nelem(), PropagationMatrix::NumberOfFrequencies(), and PropagationMatrix::StokesDimensions().

Referenced by get_stepwise_transmission_matrix().

◆ 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 PropagationMatrix::K12(), PropagationMatrix::Kjj(), sqrt(), and PropagationMatrix::StokesDimensions().

Referenced by rte_step_doit_replacement().

◆ operator<<() [1/6]

std::ostream& operator<< ( std::ostream &  os,
const ArrayOfArrayOfPropagationMatrix aapm 
)

output operator

Definition at line 2047 of file propagationmatrix.cc.

◆ operator<<() [2/6]

std::ostream& operator<< ( std::ostream &  os,
const ArrayOfArrayOfStokesVector aasv 
)

Definition at line 2064 of file propagationmatrix.cc.

◆ operator<<() [3/6]

std::ostream& operator<< ( std::ostream &  os,
const ArrayOfPropagationMatrix apm 
)

output operator

Definition at line 2041 of file propagationmatrix.cc.

◆ operator<<() [4/6]

std::ostream& operator<< ( std::ostream &  os,
const ArrayOfStokesVector asv 
)

Definition at line 2059 of file propagationmatrix.cc.

◆ operator<<() [5/6]

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

output operator

Definition at line 2036 of file propagationmatrix.cc.

References PropagationMatrix::Data().

◆ operator<<() [6/6]

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

Definition at line 2054 of file propagationmatrix.cc.

References PropagationMatrix::Data().