14 const Index grid_dimensions,
15 const Sparse& covmat_block,
16 const Sparse& covmat_inv_block) {
17 Index start = covmat.
nrows();
18 Index extent = covmat_block.nrows();
19 Range range(start, extent);
21 for (Index j = 0; j < grid_dimensions; ++j) {
22 n_gps *= jq.
Grids()[j].nelem();
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;
56 Index start = covmat.
nrows();
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));
73 z_grid = Vector(p_grid.nelem());
75 for (Index i = 0; i < p_grid.nelem(); ++i) {
77 "Pressures below 0.01 Pa are not accedpted.");
80 for (Index i = 0; i < p_grid.nelem(); ++i) {
81 z_grid[i] = 16e3 * (5.0 - log10(p_grid[i]));
86 p_grid = Vector(z_grid.nelem());
88 for (Index i = 0; i < p_grid.nelem(); ++i) {
90 "Altitudes above 120 km are not accepted.");
93 for (Index i = 0; i < z_grid.nelem(); ++i) {
94 p_grid[i] = pow(10.0, 5.0 - z_grid[i] / 16e3);
102template <
typename MatrixType>
108 const Vector& elements) {
109 matrix.insert_elements(
110 row_indices.
nelem(), row_indices, column_indices, elements);
119 const Vector& 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");
137 Index n = vars.nelem();
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,
170 Index n = grid.nelem();
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);
191 Numeric dz = abs(grid[1] - grid[0]);
192 Numeric alpha = exp(-dz / lc);
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>
247 const Vector& sigma1,
248 const Vector& sigma2,
254 Index m = grid1.nelem();
255 Vector sigma1_copy(sigma1), lc1_copy(lc1);
257 ARTS_ASSERT((sigma1.nelem() == m) || (sigma1.nelem() == 1));
258 if (sigma1.nelem() == 1) {
259 Numeric
v = sigma1[0];
260 sigma1_copy = Vector(m);
264 ARTS_ASSERT((lc1.nelem() == m) || (lc1.nelem() == 1));
265 if (lc1.nelem() == 1) {
267 lc1_copy = Vector(m);
271 Index n = grid2.nelem();
272 Vector sigma2_copy(sigma2), lc2_copy(lc2);
274 ARTS_ASSERT((sigma2.nelem() == n) || (sigma2.nelem() == 1));
275 if (sigma2.nelem() == 1) {
276 Numeric
v = sigma2[0];
277 sigma2_copy = Vector(n);
281 ARTS_ASSERT((lc2.nelem() == n) || (lc2.nelem() == 1));
282 if (lc2.nelem() == 1) {
284 lc2_copy = Vector(n);
288 ConstVectorView grid_view_1(grid1), sigma_view_1(sigma1_copy),
289 cls_view_1(lc1_copy);
290 ConstVectorView grid_view_2(grid2), sigma_view_2(sigma2_copy),
291 cls_view_2(lc2_copy);
295 grid_view_2.set(grid_view_1);
296 sigma_view_2.set(sigma_view_1);
297 cls_view_2.set(cls_view_1);
301 auto f_lin = [&](Index i, Index j) {
302 Numeric
d = abs(grid_view_1[i] - grid_view_2[j]);
303 Numeric cl = 0.5 * (cls_view_1[i] + cls_view_2[j]);
304 return 1.0 - (1.0 - exp(-1.0)) * (
d / cl);
307 auto f_exp = [&](Index i, Index j) {
308 Numeric
d = abs(grid_view_1[i] - grid_view_2[j]);
309 Numeric cl = 0.5 * (cls_view_1[i] + cls_view_2[j]);
313 auto f_gau = [&](Index i, Index j) {
314 Numeric
d = abs(grid_view_1[i] - grid_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);
327 std::function<Numeric(Index, Index)> f;
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);
366 const Vector& sigma1,
367 const Vector& sigma2,
377 const Vector& sigma1,
378 const Vector& sigma2,
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.");
427 Index start = covmat_se.
nrows();
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);
527 Range range = Range(0, n);
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();
603 Index jq_m = jq[ii].
nelem();
604 if (jq[ii].HasAffine()) {
605 jq_m = jq[ii].TransformationMatrix().ncols();
607 Index jq_n = jq[jj].
nelem();
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();
675 Index jq_m = jq[ii].
nelem();
676 if (jq[ii].HasAffine()) {
677 jq_m = jq[ii].TransformationMatrix().ncols();
680 Index jq_n = jq[jj].
nelem();
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));
729 for (Index i = 0; i < x_norm.nelem(); ++i) {
730 x_norm[i] = sqrt(x_norm[i]);
742 const Index& atmosphere_dim,
743 const Sparse& covmat_block,
744 const Sparse& covmat_inv_block,
745 const Vector& p_grid,
746 const Vector& lat_grid,
747 const Vector& lon_grid,
748 const Vector& rq_p_grid,
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,
783 const Vector& f_grid,
787 ws, jacobian_quantities, jacobian_agenda, f_grid, df, verbosity);
789 jacobian_quantities.back(),
790 jacobian_quantities.
nelem() - 1,
800 const Vector& f_grid,
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,
863 const Vector& p_grid,
864 const Vector& lat_grid,
865 const Vector& lon_grid,
866 const Vector& rq_p_grid,
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,
899 const Matrix& sensor_pos,
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,
930 const Matrix& sensor_pos,
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,
965 const Vector& p_grid,
966 const Vector& lat_grid,
967 const Vector& lon_grid,
968 const Vector& rq_p_grid,
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,
1038 const Vector& p_grid,
1039 const Vector& lat_grid,
1040 const Vector& lon_grid,
1041 const Vector& rq_p_grid,
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,
1073 const Vector& p_grid,
1074 const Vector& lat_grid,
1075 const Vector& lon_grid,
1076 const Vector& rq_p_grid,
1077 const Vector& rq_lat_grid,
1078 const Vector& rq_lon_grid,
1080 const Numeric& dfrequency,
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,
1110 const Vector& p_grid,
1111 const Vector& lat_grid,
1112 const Vector& lon_grid,
1113 const Vector& rq_p_grid,
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,
1145 const Vector& lat_grid,
1146 const Vector& lon_grid,
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;
1199 Sparse& covmat_block,
1200 Sparse& covmat_inv_block,
1203 const Index& initialize_jacobian,
1205 if (initialize_jacobian == 1) {
1206 jacobianInit(ws, jacobian_quantities, jacobian_agenda, verbosity);
1209 covmat_block = Sparse();
1210 covmat_inv_block = Sparse();
1216 Vector& retrieval_ss,
1217 const Matrix& covmat_so,
1218 const Matrix& covmat_ss,
1220 Index n_so = covmat_so.nrows();
1221 Index n_ss = covmat_ss.nrows();
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
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.
Deals with internal derivatives, Jacobian definition, and OEM calculations.
const ArrayOfVector & Grids() const
Returns the grids of the retrieval.
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.
A logical struct for global quantum numbers with species identifiers.