14 const Index grid_dimensions,
15 const Sparse& covmat_block,
16 const Sparse& covmat_inv_block) {
19 Range range(start, extent);
21 for (
Index j = 0; j < grid_dimensions; ++j) {
25 if (!covmat_block.
empty()) {
26 if ((n_gps == extent) && (n_gps == covmat_block.
ncols())) {
27 std::shared_ptr<Sparse> mat = make_shared<Sparse>(covmat_block);
29 Block(range, range, std::make_pair(rq_index, rq_index), mat));
32 "The matrix in covmat_block was expected to have dimensions [",
33 n_gps,
", ", n_gps,
"] but found to have dimensions [",
34 covmat_block.
nrows(),
", ", covmat_block.
ncols(),
"].")
37 if (!covmat_inv_block.
empty()) {
38 if ((n_gps == covmat_inv_block.
nrows()) &&
39 (n_gps == covmat_inv_block.
ncols())) {
40 std::shared_ptr<Sparse> mat = make_shared<Sparse>(covmat_inv_block);
42 Block(range, range, std::make_pair(rq_index, rq_index), mat));
45 "The matrix in covmat_inv_block was expected to have dimensions [",
46 n_gps,
", ", n_gps,
"] but found to have dimensions [",
47 covmat_block.
nrows(),
", ", covmat_block.
ncols(),
"].")
55 Index i = jacobian_quantities.size() - 1;
58 Range range(start, extent);
59 std::shared_ptr<Matrix> mat = make_shared<Matrix>(1, 1);
60 mat->operator()(0, 0) = var;
62 mat = make_shared<Matrix>(1, 1);
63 mat->operator()(0, 0) = 1.0 / var;
65 Block(range, range, std::make_pair(i, i), mat));
77 "Pressures below 0.01 Pa are not accedpted.");
81 z_grid[i] = 16e3 * (5.0 - log10(p_grid[i]));
90 "Altitudes above 120 km are not accepted.");
94 p_grid[i] =
pow(10.0, 5.0 - z_grid[i] / 16e3);
102template <
typename MatrixType>
109 matrix.insert_elements(
110 row_indices.
nelem(), row_indices, column_indices, elements);
125 for (
Index i = 0; i < elements.
nelem(); ++i) {
126 matrix(row_indices[i], column_indices[i]) = elements[i];
130template <
typename MatrixType>
132 MatrixType& block_inv,
136 "Cannot pass empty vector of variances to covmat_blockSetDiagonal");
138 block = MatrixType(n, n);
139 block_inv = MatrixType(n, n);
142 Vector elements(n), elements_inv(n);
143 for (
Index i = 0; i < n; ++i) {
145 elements[i] = vars[i];
146 elements_inv[i] = 1.0 / vars[i];
162template <
typename MatrixType>
164 MatrixType& block_inv,
172 Vector elements, elements_inv;
175 "Size of grid incompatible with given variances.");
177 elements =
Vector(row_indices.size());
178 for (
size_t i = 0; i < row_indices.size(); ++i) {
179 Numeric dz =
abs(grid[row_indices[i]] - grid[column_indices[i]]);
181 sigma[row_indices[i]] * sigma[column_indices[i]] * exp(-dz / lc);
185 block = MatrixType(n, n);
189 elements =
Vector(3 * n - 2);
193 Numeric c1 = -alpha / (1.0 - alpha * alpha);
194 Numeric c2 = 1.0 / (1.0 - alpha * alpha);
196 for (
Index i = 0; i < n; ++i) {
199 column_indices.push_back(i - 1);
200 row_indices.push_back(i);
201 elements[i * 3 - 1] = c1;
202 elements[i * 3 - 1] /= (sigma[i] * sigma[i - 1]);
206 column_indices.push_back(i);
207 row_indices.push_back(i);
208 if (i == 0 || i == n - 1) {
209 elements[i * 3] = c2;
211 elements[i * 3] = c2 * (1.0 + alpha * alpha);
213 elements[i * 3] /= (sigma[i] * sigma[i]);
217 column_indices.push_back(i + 1);
218 row_indices.push_back(i);
219 elements[i * 3 + 1] = c1;
220 elements[i * 3 + 1] /= (sigma[i] * sigma[i + 1]);
223 block_inv = MatrixType(n, n);
224 insert_elements(block_inv, n, n, row_indices, column_indices, elements);
243template <
typename MatrixType>
255 Vector sigma1_copy(sigma1), lc1_copy(lc1);
258 if (sigma1.
nelem() == 1) {
265 if (lc1.
nelem() == 1) {
272 Vector sigma2_copy(sigma2), lc2_copy(lc2);
275 if (sigma2.
nelem() == 1) {
282 if (lc2.
nelem() == 1) {
289 cls_view_1(lc1_copy);
291 cls_view_2(lc2_copy);
295 grid_view_2 = grid_view_1;
296 sigma_view_2 = sigma_view_1;
297 cls_view_2 = cls_view_1;
303 Numeric cl = 0.5 * (cls_view_1[i] + cls_view_2[j]);
304 return 1.0 - (1.0 - exp(-1.0)) * (
d / cl);
309 Numeric cl = 0.5 * (cls_view_1[i] + cls_view_2[j]);
315 Numeric cl = 0.5 * (cls_view_1[i] + cls_view_2[j]);
324 row_indices.reserve(n * m);
325 column_indices.reserve(n * m);
329 if (fname ==
"exp") {
331 }
else if (fname ==
"lin") {
333 }
else if (fname ==
"gau") {
337 os << fname <<
" is not a known function name. Supported names"
338 <<
"are: exp, lin, gau.";
339 std::runtime_error(os.str());
342 for (
Index i = 0; i < m; ++i) {
343 for (
Index j = 0; j < n; ++j) {
346 row_indices.push_back(i);
347 column_indices.push_back(j);
352 Vector elements(row_indices.size());
353 for (
size_t i = 0; i < row_indices.size(); ++i) {
354 Index ii = row_indices[i];
355 Index jj = column_indices[i];
356 elements[i] = sigma_view_1[ii] * sigma_view_2[jj] * f(ii, jj);
359 block = MatrixType(m, n);
389template <
typename MatrixType>
391 const MatrixType& block,
395 Index m = block.nrows();
396 Index n = block.ncols();
399 if ((ii < 0) && (jj < 0)) {
405 "The block must be on or above the diagonal, "
406 " i.e. *i* <= *j*.");
410 if ((ii >= ndiagblocks)) {
411 if (ii > ndiagblocks) {
413 "Off-diagonal block can only be added to rows that already "
414 "have a block on the diagonal.");
416 "Diagonal block must be added row-by-row starting in the "
417 " upper left of the matrix.");
422 "Block already present in covariance matrix.");
426 "Diagonal blocks must be square.");
428 Range range(start, m);
429 std::shared_ptr<MatrixType> mat = std::make_shared<MatrixType>(block);
435 "Trying to add an off-diagonal block that"
436 " lacks corresponding diagonal block in the "
438 Range row_range =
b->get_row_range();
442 "Trying to add an off-diagonal block that"
443 " lacks corresponding diagonal block in the "
445 Range column_range =
b->get_column_range();
448 "The off-diagonal block is inconsistent "
449 "with the corresponding diagonal blocks.");
451 std::shared_ptr<MatrixType> mat = std::make_shared<MatrixType>(block);
453 Block(row_range, column_range, std::make_pair(ii, jj), mat));
469template <
typename MatrixType>
471 const MatrixType& inv_block,
476 "Need at least one non-inverse block in the matrix"
477 " before an inverse block can be added.");
479 if ((ii < 0) && (jj < 0)) {
484 Index m = inv_block.nrows();
485 Index n = inv_block.ncols();
490 "Cannot add inverse block to the covariance "
491 " without corresponding non-inverse block.");
494 "Dimensions of block are inconsistent with "
495 " non-inverse block.");
500 std::shared_ptr<MatrixType> mat = std::make_shared<MatrixType>(inv_block);
502 Block(row_range, column_range, std::make_pair(ii, jj), mat));
517template <
typename MatrixType>
519 Index m = block.nrows();
520 Index n = block.ncols();
523 "Covariance matrix must be square!");
526 IndexPair indices = std::make_pair(0, 0);
528 std::shared_ptr<MatrixType> mat_ptr = std::make_shared<MatrixType>(block);
538template <
typename MatrixType>
540 const MatrixType& block,
557template <
typename MatrixType>
559 const MatrixType& block,
576template <
typename MatrixType>
579 const MatrixType& block,
584 if ((ii < 0) && (jj < 0)) {
588 "*covmat_sx* already contains more or as many diagonal"
589 " blocks as there are retrieval quantities.");
592 "The block indices must either be both -1 (default) or\n"
593 "non-negative and smaller than the number of retrieval \n"
596 "Only blocks above the diagonal can be set, hence"
597 "*i* must be less than or equal to *j*.");
600 Index m = block.nrows();
601 Index n = block.ncols();
604 if (jq[ii].HasAffine()) {
605 jq_m = jq[ii].TransformationMatrix().ncols();
608 if (jq[jj].HasAffine()) {
609 jq_n = jq[jj].TransformationMatrix().ncols();
613 "The covariance block for retrieval quantities ", ii,
" and ",
614 jj,
" was expected to have dimensions [", jq_m,
", ", jq_n,
615 "] but found to have dimensions "
616 "[", m,
", ", n,
"].")
621 Index row_start = ji[ii][0];
622 Index row_extent = ji[ii][1] - ji[ii][0] + 1;
623 Range row_range(row_start, row_extent);
625 Index col_start = ji[jj][0];
626 Index col_extent = ji[jj][1] - ji[jj][0] + 1;
627 Range col_range(col_start, col_extent);
629 std::shared_ptr<MatrixType> mat = make_shared<MatrixType>(block);
631 Block(row_range, col_range, std::make_pair(ii, jj), mat));
648template <
typename MatrixType>
651 const MatrixType& block_inv,
656 "Need at least one non-inverse block in the matrix"
657 " before an inverse block can be added.");
659 if ((ii < 0) && (jj < 0)) {
664 "The block indices must either be both -1 (default) or\n"
665 "non-negative and smaller than the number of retrieval \n"
668 "Only blocks above the diagonal can be set, hence"
669 "*i* must be less than or equal to *j*.");
672 Index m = block_inv.nrows();
673 Index n = block_inv.ncols();
676 if (jq[ii].HasAffine()) {
677 jq_m = jq[ii].TransformationMatrix().ncols();
681 if (jq[jj].HasAffine()) {
682 jq_n = jq[jj].TransformationMatrix().ncols();
686 "The dimensions of the covariance block ( ", m,
688 " with the dimensionality of "
689 " retrieval quantity ", ii,
" and ", jj,
", respectively.")
692 "To add the inverse of a block the non-inverse"
693 " block must be added first.");
698 Index row_start = ji[ii][0];
699 Index row_extent = ji[ii][1] - ji[ii][0] + 1;
700 Range row_range(row_start, row_extent);
702 Index col_start = ji[jj][0];
703 Index col_extent = ji[jj][1] - ji[jj][0] + 1;
704 Range col_range(col_start, col_extent);
706 std::shared_ptr<MatrixType> mat = make_shared<MatrixType>(block_inv);
708 Block(row_range, col_range, std::make_pair(ii, jj), mat));
730 x_norm[i] =
sqrt(x_norm[i]);
742 const Index& atmosphere_dim,
743 const Sparse& covmat_block,
744 const Sparse& covmat_inv_block,
749 const Vector& rq_lat_grid,
750 const Vector& rq_lon_grid,
753 const Index& for_species_tag,
770 jacobian_quantities.back(),
771 jacobian_quantities.
nelem() - 1,
781 const Sparse& covmat_block,
782 const Sparse& covmat_inv_block,
787 ws, jacobian_quantities, jacobian_agenda, f_grid, df, verbosity);
789 jacobian_quantities.back(),
790 jacobian_quantities.
nelem() - 1,
801 const Sparse& covmat_block,
802 const Sparse& covmat_inv_block,
806 ws, jacobian_quantities, jacobian_agenda, f_grid, df, verbosity);
808 jacobian_quantities.back(),
809 jacobian_quantities.
nelem() - 1,
820 const String& catalog_parameter,
837 const Sparse& covmat_block,
838 const Sparse& covmat_inv_block,
849 jacobian_quantities.back(),
850 jacobian_quantities.
nelem() - 1,
860 const Index& atmosphere_dim,
861 const Sparse& covmat_block,
862 const Sparse& covmat_inv_block,
867 const Vector& rq_lat_grid,
868 const Vector& rq_lon_grid,
886 jacobian_quantities.back(),
887 jacobian_quantities.
nelem() - 1,
897 const Sparse& covmat_block,
898 const Sparse& covmat_inv_block,
901 const Index& poly_order,
915 jacobian_quantities.back(),
916 jacobian_quantities.
nelem() - 1,
926 const Sparse& covmat_block,
927 const Sparse& covmat_inv_block,
929 const Matrix& sensor_response_dlos_grid,
931 const Index& poly_order,
932 const Index& no_pol_variation,
933 const Index& no_los_variation,
934 const Index& no_mblock_variation,
936 size_t jq_start = jacobian_quantities.size();
940 sensor_response_pol_grid,
941 sensor_response_dlos_grid,
948 for (
Index i = 0; i <= poly_order; ++i) {
950 jacobian_quantities[jq_start + i],
962 const Index& atmosphere_dim,
963 const Sparse& covmat_block,
964 const Sparse& covmat_inv_block,
969 const Vector& rq_lat_grid,
970 const Vector& rq_lon_grid,
988 jacobian_quantities.back(),
989 jacobian_quantities.
nelem() - 1,
999 const Sparse& covmat_block,
1000 const Sparse& covmat_inv_block,
1002 const Matrix& sensor_response_dlos_grid,
1003 const Matrix& sensor_pos,
1004 const Vector& period_lengths,
1005 const Index& no_pol_variation,
1006 const Index& no_los_variation,
1007 const Index& no_mblock_variation,
1009 size_t jq_start = jacobian_quantities.size();
1011 jacobian_quantities,
1013 sensor_response_pol_grid,
1014 sensor_response_dlos_grid,
1019 no_mblock_variation,
1021 for (
Index i = 0; i < period_lengths.
nelem(); ++i) {
1023 jacobian_quantities[jq_start + i],
1035 const Index& atmosphere_dim,
1036 const Sparse& covmat_block,
1037 const Sparse& covmat_inv_block,
1042 const Vector& rq_lat_grid,
1043 const Vector& rq_lon_grid,
1047 jacobian_quantities,
1059 jacobian_quantities.back(),
1060 jacobian_quantities.
nelem() - 1,
1070 const Index& atmosphere_dim,
1071 const Sparse& covmat_block,
1072 const Sparse& covmat_inv_block,
1077 const Vector& rq_lat_grid,
1078 const Vector& rq_lon_grid,
1083 jacobian_quantities,
1096 jacobian_quantities.back(),
1097 jacobian_quantities.
nelem() - 1,
1107 const Index& atmosphere_dim,
1108 const Sparse& covmat_block,
1109 const Sparse& covmat_inv_block,
1114 const Vector& rq_lat_grid,
1115 const Vector& rq_lon_grid,
1119 jacobian_quantities,
1131 jacobian_quantities.back(),
1132 jacobian_quantities.
nelem() - 1,
1142 const Sparse& covmat_block,
1143 const Sparse& covmat_inv_block,
1144 const Index& atmosphere_dim,
1147 const Vector& rq_lat_grid,
1148 const Vector& rq_lon_grid,
1152 jacobian_quantities,
1163 jacobian_quantities.back(),
1164 jacobian_quantities.
nelem() - 1,
1174 Index& retrieval_checked,
1179 ws, jacobian_do, jacobian_agenda, jacobian_quantities, verbosity);
1185 "*covmat_sx* does not contain a diagonal block for each retrieval"
1186 " quantity in the Jacobian.\n"
1187 " Fails test (!covmat_sx.has_diagonal_blocks(ji_t)) for ji_t ", ji_t,
1190 "The blocks in *covmat_sx* are not consistent with the retrieval"
1191 " quantities in the Jacobian.");
1192 retrieval_checked =
true;
1200 Sparse& covmat_inv_block,
1203 const Index& initialize_jacobian,
1205 if (initialize_jacobian == 1) {
1206 jacobianInit(ws, jacobian_quantities, jacobian_agenda, verbosity);
1210 covmat_inv_block =
Sparse();
1223 retrieval_eo.
resize(n_so);
1224 for (
Index i = 0; i < n_so; ++i) {
1225 retrieval_eo[i] =
sqrt(covmat_so(i, i));
1228 retrieval_ss.
resize(n_ss);
1229 for (
Index i = 0; i < n_ss; ++i) {
1230 retrieval_ss[i] =
sqrt(covmat_ss(i, i));
This can be used to make arrays out of anything.
Index nelem() const ARTS_NOEXCEPT
Range get_row_range() const
Range get_column_range() const
Index nrows() const noexcept
A constant view of a Vector.
Index nelem() const noexcept
Returns the number of elements.
bool empty() const noexcept
Returns true if variable size is zero.
void add_correlation(Block c)
Add block to covariance matrix.
bool has_block(Index i, Index j)
Check if the block with indices (i, j) is contained in the covariance matrix.
const Block * get_block(Index i=-1, Index j=-1)
Return a pointer to the block with indices (i,j).
bool is_consistent(const ArrayOfArrayOfIndex &jis) const
Checks that the dimensions of the blocks in the covariance matrix are consistent with ranges occupied...
Vector diagonal() const
Diagonal elements as vector.
bool has_diagonal_blocks(const ArrayOfArrayOfIndex &jis) const
Checks that the covariance matrix contains one diagonal block per retrieval quantity.
void add_correlation_inverse(Block c)
Add block inverse to covariance matrix.
Index ndiagblocks() const
! The number of diagonal blocks in the matrix excluding inverses.
void resize(Index r, Index c)
Resize function.
constexpr Index get_extent() const noexcept
Returns the extent of the range.
Deals with internal derivatives, Jacobian definition, and OEM calculations.
const ArrayOfVector & Grids() const
Returns the grids of the retrieval.
void resize(Index n)
Resize function.
Header files of CovarianceMatrix class.
std::pair< Index, Index > IndexPair
#define ARTS_ASSERT(condition,...)
#define ARTS_USER_ERROR(...)
#define ARTS_USER_ERROR_IF(condition,...)
void jac_ranges_indices(ArrayOfArrayOfIndex &jis, bool &any_affine, const ArrayOfRetrievalQuantity &jqs, const bool &before_affine)
Determines the index range inside x and the Jacobian for each retrieval quantity.
Routines for setting up the jacobian.
void jacobianAddWind(Workspace &, ArrayOfRetrievalQuantity &jq, Agenda &jacobian_agenda, const Index &atmosphere_dim, const Vector &p_grid, const Vector &lat_grid, const Vector &lon_grid, const Vector &rq_p_grid, const Vector &rq_lat_grid, const Vector &rq_lon_grid, const String &component, const Numeric &dfrequency, const Verbosity &verbosity)
WORKSPACE METHOD: jacobianAddWind.
void jacobianAddSpecialSpecies(Workspace &, ArrayOfRetrievalQuantity &jq, Agenda &jacobian_agenda, const Index &atmosphere_dim, const Vector &p_grid, const Vector &lat_grid, const Vector &lon_grid, const Vector &rq_p_grid, const Vector &rq_lat_grid, const Vector &rq_lon_grid, const String &species, const Verbosity &verbosity)
WORKSPACE METHOD: jacobianAddSpecialSpecies.
void jacobianClose(Workspace &ws_in, Index &jacobian_do, Agenda &jacobian_agenda, const ArrayOfRetrievalQuantity &jacobian_quantities, const Verbosity &verbosity)
WORKSPACE METHOD: jacobianClose.
void jacobianAddMagField(Workspace &, ArrayOfRetrievalQuantity &jq, Agenda &jacobian_agenda, const Index &atmosphere_dim, const Vector &p_grid, const Vector &lat_grid, const Vector &lon_grid, const Vector &rq_p_grid, const Vector &rq_lat_grid, const Vector &rq_lon_grid, const String &component, const Numeric &dB, const Verbosity &verbosity)
WORKSPACE METHOD: jacobianAddMagField.
void jacobianAddSurfaceQuantity(Workspace &, ArrayOfRetrievalQuantity &jq, Agenda &jacobian_agenda, const Index &atmosphere_dim, const Vector &lat_grid, const Vector &lon_grid, const Vector &rq_lat_grid, const Vector &rq_lon_grid, const String &quantity, const Verbosity &verbosity)
WORKSPACE METHOD: jacobianAddSurfaceQuantity.
void jacobianInit(Workspace &ws, ArrayOfRetrievalQuantity &jacobian_quantities, Agenda &jacobian_agenda, const Verbosity &)
WORKSPACE METHOD: jacobianInit.
void jacobianAddFreqStretch(Workspace &ws, ArrayOfRetrievalQuantity &jacobian_quantities, Agenda &jacobian_agenda, const Vector &f_grid, const Numeric &df, const Verbosity &)
WORKSPACE METHOD: jacobianAddFreqStretch.
void jacobianAddPointingZa(Workspace &ws, ArrayOfRetrievalQuantity &jacobian_quantities, Agenda &jacobian_agenda, const Matrix &sensor_pos, const ArrayOfTime &sensor_time, const Index &poly_order, const String &calcmode, const Numeric &dza, const Verbosity &)
WORKSPACE METHOD: jacobianAddPointingZa.
void jacobianAddSinefit(Workspace &ws, ArrayOfRetrievalQuantity &jq, Agenda &jacobian_agenda, const ArrayOfIndex &sensor_response_pol_grid, const Matrix &sensor_response_dlos_grid, const Matrix &sensor_pos, const Vector &period_lengths, const Index &no_pol_variation, const Index &no_los_variation, const Index &no_mblock_variation, const Verbosity &)
WORKSPACE METHOD: jacobianAddSinefit.
void jacobianAddTemperature(Workspace &, ArrayOfRetrievalQuantity &jq, Agenda &jacobian_agenda, const Index &atmosphere_dim, const Vector &p_grid, const Vector &lat_grid, const Vector &lon_grid, const Vector &rq_p_grid, const Vector &rq_lat_grid, const Vector &rq_lon_grid, const String &hse, const Verbosity &verbosity)
WORKSPACE METHOD: jacobianAddTemperature.
void jacobianAddBasicCatalogParameter(Workspace &, ArrayOfRetrievalQuantity &jq, Agenda &jacobian_agenda, const QuantumIdentifier &catalog_identity, const String &catalog_parameter, const Verbosity &verbosity)
WORKSPACE METHOD: jacobianAddBasicCatalogParameter.
void jacobianAddAbsSpecies(Workspace &, ArrayOfRetrievalQuantity &jq, Agenda &jacobian_agenda, const Index &atmosphere_dim, const Vector &p_grid, const Vector &lat_grid, const Vector &lon_grid, const Vector &rq_p_grid, const Vector &rq_lat_grid, const Vector &rq_lon_grid, const String &species, const String &mode, const Index &for_species_tag, const Verbosity &verbosity)
WORKSPACE METHOD: jacobianAddAbsSpecies.
void jacobianAddScatSpecies(Workspace &, ArrayOfRetrievalQuantity &jq, Agenda &jacobian_agenda, const Index &atmosphere_dim, const Vector &p_grid, const Vector &lat_grid, const Vector &lon_grid, const Vector &rq_p_grid, const Vector &rq_lat_grid, const Vector &rq_lon_grid, const String &species, const String &quantity, const Verbosity &verbosity)
WORKSPACE METHOD: jacobianAddScatSpecies.
void jacobianAddFreqShift(Workspace &ws, ArrayOfRetrievalQuantity &jacobian_quantities, Agenda &jacobian_agenda, const Vector &f_grid, const Numeric &df, const Verbosity &)
WORKSPACE METHOD: jacobianAddFreqShift.
void jacobianAddBasicCatalogParameters(Workspace &ws, ArrayOfRetrievalQuantity &jq, Agenda &jacobian_agenda, const ArrayOfQuantumIdentifier &catalog_identities, const ArrayOfString &catalog_parameters, const Verbosity &verbosity)
WORKSPACE METHOD: jacobianAddBasicCatalogParameters.
void jacobianAddPolyfit(Workspace &ws, ArrayOfRetrievalQuantity &jq, Agenda &jacobian_agenda, const ArrayOfIndex &sensor_response_pol_grid, const Matrix &sensor_response_dlos_grid, const Matrix &sensor_pos, const Index &poly_order, const Index &no_pol_variation, const Index &no_los_variation, const Index &no_mblock_variation, const Verbosity &)
WORKSPACE METHOD: jacobianAddPolyfit.
void add_scalar_variance(CovarianceMatrix &covmat, ArrayOfRetrievalQuantity &jacobian_quantities, Numeric var)
void retrievalDefClose(Workspace &ws, Index &jacobian_do, Agenda &jacobian_agenda, Index &retrieval_checked, const CovarianceMatrix &covmat_sx, const ArrayOfRetrievalQuantity &jacobian_quantities, const Verbosity &verbosity)
WORKSPACE METHOD: retrievalDefClose.
void check_and_add_block(CovarianceMatrix &covmat, const RetrievalQuantity &jq, const Index rq_index, const Index grid_dimensions, const Sparse &covmat_block, const Sparse &covmat_inv_block)
void covmat1DMarkov(MatrixType &block, MatrixType &block_inv, const Vector &grid, const Vector &sigma, const Numeric &lc, const Numeric &, const Verbosity &)
void retrievalDefInit(Workspace &ws, CovarianceMatrix &covmat_se, CovarianceMatrix &covmat_sx, Sparse &covmat_block, Sparse &covmat_inv_block, ArrayOfRetrievalQuantity &jacobian_quantities, Agenda &jacobian_agenda, const Index &initialize_jacobian, const Verbosity &verbosity)
WORKSPACE METHOD: retrievalDefInit.
void covmat1D(MatrixType &block, const Vector &grid1, const Vector &grid2, const Vector &sigma1, const Vector &sigma2, const Vector &lc1, const Vector &lc2, const Numeric &co, const String &fname, const Verbosity &)
void covmat_sxAddBlock(CovarianceMatrix &covmat_sx, const ArrayOfRetrievalQuantity &jq, const MatrixType &block, const Index &i, const Index &j, const Verbosity &)
void insert_elements(MatrixType &matrix, Index, Index, const ArrayOfIndex &row_indices, const ArrayOfIndex &column_indices, const Vector &elements)
void retrievalAddFreqShift(Workspace &ws, CovarianceMatrix &covmat_sx, ArrayOfRetrievalQuantity &jacobian_quantities, Agenda &jacobian_agenda, const Sparse &covmat_block, const Sparse &covmat_inv_block, const Vector &f_grid, const Numeric &df, const Verbosity &verbosity)
WORKSPACE METHOD: retrievalAddFreqShift.
void retrievalAddCatalogParameters(Workspace &ws, CovarianceMatrix &covmat_sx, ArrayOfRetrievalQuantity &jacobian_quantities, Agenda &jacobian_agenda, const Sparse &covmat_block, const Sparse &covmat_inv_block, const ArrayOfQuantumIdentifier &catalog_identities, const ArrayOfString &catalog_parameters, const Verbosity &verbosity)
WORKSPACE METHOD: retrievalAddCatalogParameters.
void PFromZSimple(Vector &p_grid, const Vector &z_grid, const Verbosity &)
WORKSPACE METHOD: PFromZSimple.
void ZFromPSimple(Vector &z_grid, const Vector &p_grid, const Verbosity &)
WORKSPACE METHOD: ZFromPSimple.
void retrievalAddPolyfit(Workspace &ws, CovarianceMatrix &covmat_sx, ArrayOfRetrievalQuantity &jacobian_quantities, Agenda &jacobian_agenda, const Sparse &covmat_block, const Sparse &covmat_inv_block, const ArrayOfIndex &sensor_response_pol_grid, const Matrix &sensor_response_dlos_grid, const Matrix &sensor_pos, const Index &poly_order, const Index &no_pol_variation, const Index &no_los_variation, const Index &no_mblock_variation, const Verbosity &verbosity)
WORKSPACE METHOD: retrievalAddPolyfit.
void covmat_sxSet(CovarianceMatrix &covmat, const MatrixType &block, const Verbosity &)
void covmat_seSet(CovarianceMatrix &covmat, const MatrixType &block, const Verbosity &)
void retrievalAddAbsSpecies(Workspace &ws, CovarianceMatrix &covmat_sx, ArrayOfRetrievalQuantity &jacobian_quantities, Agenda &jacobian_agenda, const Index &atmosphere_dim, const Sparse &covmat_block, const Sparse &covmat_inv_block, const Vector &p_grid, const Vector &lat_grid, const Vector &lon_grid, const Vector &rq_p_grid, const Vector &rq_lat_grid, const Vector &rq_lon_grid, const String &species, const String &mode, const Index &for_species_tag, const Verbosity &verbosity)
WORKSPACE METHOD: retrievalAddAbsSpecies.
void retrievalAddSpecialSpecies(Workspace &ws, CovarianceMatrix &covmat_sx, ArrayOfRetrievalQuantity &jacobian_quantities, Agenda &jacobian_agenda, const Index &atmosphere_dim, const Sparse &covmat_block, const Sparse &covmat_inv_block, const Vector &p_grid, const Vector &lat_grid, const Vector &lon_grid, const Vector &rq_p_grid, const Vector &rq_lat_grid, const Vector &rq_lon_grid, const String &species, const Verbosity &verbosity)
WORKSPACE METHOD: retrievalAddSpecialSpecies.
void retrievalAddPointingZa(Workspace &ws, CovarianceMatrix &covmat_sx, ArrayOfRetrievalQuantity &jacobian_quantities, Agenda &jacobian_agenda, const Sparse &covmat_block, const Sparse &covmat_inv_block, const Matrix &sensor_pos, const ArrayOfTime &sensor_time, const Index &poly_order, const String &calcmode, const Numeric &dza, const Verbosity &verbosity)
WORKSPACE METHOD: retrievalAddPointingZa.
void retrievalAddMagField(Workspace &ws, CovarianceMatrix &covmat_sx, ArrayOfRetrievalQuantity &jacobian_quantities, Agenda &jacobian_agenda, const Index &atmosphere_dim, const Sparse &covmat_block, const Sparse &covmat_inv_block, const Vector &p_grid, const Vector &lat_grid, const Vector &lon_grid, const Vector &rq_p_grid, const Vector &rq_lat_grid, const Vector &rq_lon_grid, const String &component, const Numeric &dB, const Verbosity &verbosity)
WORKSPACE METHOD: retrievalAddMagField.
void retrievalAddWind(Workspace &ws, CovarianceMatrix &covmat_sx, ArrayOfRetrievalQuantity &jacobian_quantities, Agenda &jacobian_agenda, const Index &atmosphere_dim, const Sparse &covmat_block, const Sparse &covmat_inv_block, const Vector &p_grid, const Vector &lat_grid, const Vector &lon_grid, const Vector &rq_p_grid, const Vector &rq_lat_grid, const Vector &rq_lon_grid, const String &component, const Numeric &dfrequency, const Verbosity &verbosity)
WORKSPACE METHOD: retrievalAddWind.
void retrievalAddSinefit(Workspace &ws, CovarianceMatrix &covmat_sx, ArrayOfRetrievalQuantity &jacobian_quantities, Agenda &jacobian_agenda, const Sparse &covmat_block, const Sparse &covmat_inv_block, const ArrayOfIndex &sensor_response_pol_grid, const Matrix &sensor_response_dlos_grid, const Matrix &sensor_pos, const Vector &period_lengths, const Index &no_pol_variation, const Index &no_los_variation, const Index &no_mblock_variation, const Verbosity &verbosity)
WORKSPACE METHOD: retrievalAddSinefit.
void retrievalAddSurfaceQuantity(Workspace &ws, CovarianceMatrix &covmat_sx, ArrayOfRetrievalQuantity &jacobian_quantities, Agenda &jacobian_agenda, const Sparse &covmat_block, const Sparse &covmat_inv_block, const Index &atmosphere_dim, const Vector &lat_grid, const Vector &lon_grid, const Vector &rq_lat_grid, const Vector &rq_lon_grid, const String &quantity, const Verbosity &verbosity)
WORKSPACE METHOD: retrievalAddSurfaceQuantity.
void covmat_sxAddInverseBlock(CovarianceMatrix &covmat_sx, const ArrayOfRetrievalQuantity &jq, const MatrixType &block_inv, const Index &i, const Index &j, const Verbosity &)
void covmat_seAddInverseBlock(CovarianceMatrix &covmat_se, const MatrixType &inv_block, const Index &i, const Index &j, const Verbosity &)
void retrievalAddTemperature(Workspace &ws, CovarianceMatrix &covmat_sx, ArrayOfRetrievalQuantity &jacobian_quantities, Agenda &jacobian_agenda, const Index &atmosphere_dim, const Sparse &covmat_block, const Sparse &covmat_inv_block, const Vector &p_grid, const Vector &lat_grid, const Vector &lon_grid, const Vector &rq_p_grid, const Vector &rq_lat_grid, const Vector &rq_lon_grid, const String &hse, const Verbosity &verbosity)
WORKSPACE METHOD: retrievalAddTemperature.
void retrievalAddFreqStretch(Workspace &ws, CovarianceMatrix &covmat_sx, ArrayOfRetrievalQuantity &jacobian_quantities, Agenda &jacobian_agenda, const Vector &f_grid, const Sparse &covmat_block, const Sparse &covmat_inv_block, const Numeric &df, const Verbosity &verbosity)
WORKSPACE METHOD: retrievalAddFreqStretch.
void covmat_seAddBlock(CovarianceMatrix &covmat_se, const MatrixType &block, const Index &i, const Index &j, const Verbosity &)
void covmatDiagonal(MatrixType &block, MatrixType &block_inv, const Vector &vars, const Verbosity &)
void setCovarianceMatrix(CovarianceMatrix &covmat, const MatrixType &block)
void retrievalAddScatSpecies(Workspace &ws, CovarianceMatrix &covmat_sx, ArrayOfRetrievalQuantity &jacobian_quantities, Agenda &jacobian_agenda, const Index &atmosphere_dim, const Sparse &covmat_block, const Sparse &covmat_inv_block, const Vector &p_grid, const Vector &lat_grid, const Vector &lon_grid, const Vector &rq_p_grid, const Vector &rq_lat_grid, const Vector &rq_lon_grid, const String &species, const String &quantity, const Verbosity &verbosity)
WORKSPACE METHOD: retrievalAddScatSpecies.
void covmat_sxExtractSqrtDiagonal(Vector &x_norm, const CovarianceMatrix &covmat_sx, const Verbosity &)
WORKSPACE METHOD: covmat_sxExtractSqrtDiagonal.
void retrievalErrorsExtract(Vector &retrieval_eo, Vector &retrieval_ss, const Matrix &covmat_so, const Matrix &covmat_ss, const Verbosity &)
WORKSPACE METHOD: retrievalErrorsExtract.
void retrievalAddCatalogParameter(Workspace &ws, CovarianceMatrix &covmat_sx, ArrayOfRetrievalQuantity &jacobian_quantities, Agenda &jacobian_agenda, const QuantumIdentifier &catalog_identity, const String &catalog_parameter, const Numeric &var, const Verbosity &verbosity)
WORKSPACE METHOD: retrievalAddCatalogParameter.
void abs(Sparse &A, const Sparse &B)
Absolute value of sparse matrix elements.
NUMERIC Numeric
The type to use for all floating point numbers.
INDEX Index
The type to use for all integer numbers and indices.
Numeric pow(const Rational base, Numeric exp)
Power of.
Numeric sqrt(const Rational r)
Square root.
A logical struct for global quantum numbers with species identifiers.
Index nrows() const
Returns the number of rows.
Index ncols() const
Returns the number of columns.
bool empty() const
Returns true if variable size is zero.