67 "The variable *", x_name,
"* must be a boolean (0 or 1).\n"
68 "The present value of *", x_name,
"* is ", x,
".")
89 const Index& x_high) {
91 "The variable *", x_name,
"* must fulfill:\n"
92 ,
" ", x_low,
" <= ", x_name,
" <= ", x_high,
"\n"
93 ,
"The present value of *", x_name,
"* is ", x,
".")
113 "The ArrayOfIndex *", x_name,
"* must have strictly\n"
114 "increasing values, but this is not the case.\n"
136 "The variable *", x_name,
"* must be >= 0.\n"
137 "The present value of *", x_name,
"* is ", x,
".")
160 "The variable *", x_name,
"* must fulfill:\n"
161 " ", x_low,
" <= ", x_name,
" <= ", x_high,
"\n"
162 "The present value of *", x_name,
"* is ", x,
".")
185 "The variable *", x_name,
"* must fulfill:\n"
186 " ", x_low,
" < ", x_name,
" <= ", x_high,
"\n"
187 "The present value of *", x_name,
"* is ", x,
".")
210 "The variable *", x_name,
"* must fulfill:\n"
211 " ", x_low,
" <= ", x_name,
" < ", x_high,
"\n"
212 "The present value of *", x_name,
"* is ", x,
".")
235 "The variable *", x_name,
"* must fulfill:\n"
236 " ", x_low,
" < ", x_name,
" < ", x_high,
"\n"
237 "The present value of *", x_name,
"* is ", x,
".")
261 "The vector *", x_name,
"* must have the length ", l,
".\n"
262 "The present length of *", x_name,
"* is ", x.
nelem(),
".")
284 "The vectors *", x1_name,
"* and *", x2_name,
285 "* must have the same length.\n"
286 "The length of *", x1_name,
"* is ", x1.
nelem(),
".\n"
287 "The length of *", x2_name,
"* is ", x2.
nelem(),
".")
306 "The vector *", x_name,
"* must have strictly\n"
307 "increasing values, but this is not the case.\n"
327 "The vector *", x_name,
"* must have strictly\ndecreasing "
328 "values, but this is not the case.\n")
354 "Vectors ", x1_name,
" and ", x2_name,
" differ.\n",
357 , x2_name,
"[", i,
"]"
359 ,
"Difference should not exceed ", margin,
"\n")
382 "The matrix *", x_name,
"* must have ", l,
" columns,\n"
383 ,
"but the number of columns is ", x.
ncols(),
".")
401 "The matrix *", x_name,
"* must have ", l,
" rows,\n"
402 ,
"but the number of rows is ", x.
nrows(),
".")
423 "The object *", x_name,
"* does not have the right size.\n"
424 "Dimension should be:" " ",
c,
",\nbut it is: " " ",
446 "The object *", x_name,
"* does not have the right size.\n"
447 ,
"Dimensions should be:"
448 ,
" ", r,
" ",
c,
",\nbut they are: "
472 "The object *", x_name,
"* does not have the right size.\n"
473 ,
"Dimensions should be:"
474 ,
" ", p,
" ", r,
" ",
c,
",\nbut they are: "
500 "The object *", x_name,
"* does not have the right size.\n"
501 ,
"Dimensions should be:"
502 ,
" ",
b,
" ", p,
" ", r,
" ",
c
503 ,
",\nbut they are: "
532 "The object *", x_name,
"* does not have the right size.\n"
533 ,
"Dimensions should be:"
534 ,
" ", s,
" ",
b,
" ", p,
" ", r,
" ",
c
535 ,
",\nbut they are: "
566 "The object *", x_name,
"* does not have the right size.\n"
567 ,
"Dimensions should be:"
568 ,
" ",
v,
" ", s,
" ",
b,
" ", p,
" ", r,
" ",
c
569 ,
",\nbut they are: "
602 "The object *", x_name,
"* does not have the right size.\n"
603 ,
"Dimensions should be:"
604 ,
" ", l,
" ",
v,
" ", s,
" ",
b,
" ", p,
" ", r
605 ,
" ",
c,
",\nbut they are: "
629 "The agenda *", x_name,
"* is empty.\nIt is not allowed \n"
630 ,
"that an empty agenda that is actually used.\n"
631 ,
"Empty agendas are only created of methods setting dummy values \n"
667 const String& which_interpolation,
673 ing_min, ing_max, which_interpolation, old_grid, new_grid, order);
676 ing_min, ing_max, which_interpolation, old_grid, new_grid, data);
706 const String& which_interpolation,
713 "The new grid is not allowed to be empty.");
716 ARTS_USER_ERROR_IF (n_old < order + 1,
"There is a problem with the grids for the following interpolation:\n",
717 which_interpolation,
"\n",
718 "The original grid must have at least ", order + 1,
" elements.")
721 const bool ascending = (old_grid[0] <= old_grid[1]);
728 ing_max = new_grid.
nelem() - 1;
732 which_interpolation,
"\n",
733 "The original grid must be strictly sorted\n"
734 ,
"(no duplicate values). Yours is:\n"
738 og_min = old_grid[0];
739 og_max = old_grid[n_old - 1];
743 which_interpolation,
"\n",
744 "The original grid must be strictly sorted\n"
745 ,
"(no duplicate values). Yours is:\n"
749 og_max = old_grid[0];
750 og_min = old_grid[n_old - 1];
760 const Index iog_min = 0;
764 ing_max = new_grid.
nelem() - 1;
767 if (ng_max > og_max) {
768 while (ing_max > 0 && new_grid[ing_max] > old_grid[iog_max]) ing_max--;
771 if (ng_min < og_min) {
772 while (ing_min < new_grid.
nelem() - 1 &&
773 new_grid[ing_min] < old_grid[iog_min])
777 if (ng_min < og_min) {
778 while (ing_max > 0 && new_grid[ing_max] < old_grid[iog_max]) ing_max--;
781 if (ng_max > og_max) {
782 while (ing_min < new_grid.
nelem() - 1 &&
783 new_grid[ing_min] > old_grid[iog_min])
816 const String& which_interpolation,
828 ing_min, ing_max, which_interpolation, logold, lognew, order);
855 const String& which_interpolation,
860 "The new grid is not allowed to be empty.");
863 const bool ascending = (old_grid[0] <= old_grid[1]);
868 const Index iog_min = ascending ? old_grid.
nelem() - 1 : 0;
869 const Index iog_max = ascending ? 0 : old_grid.
nelem() - 1;
871 ARTS_USER_ERROR_IF (ing_min > 0 && data[iog_min] != 0,
"There is a problem with the grids for the following interpolation:\n"
872 , which_interpolation,
"\n",
873 "\nThe new grid is not fully inside the original grid.\n"
874 ,
"This is allowed if the corresponding boundary value of raw data is 0.\n"
875 ,
"New grid point: ", new_grid[ing_min],
"\n"
876 ,
"Old grid point: ", old_grid[iog_min],
"\n"
877 ,
"Boundary value: ", data[iog_min])
879 ARTS_USER_ERROR_IF (ing_max < new_grid.
nelem() - 1 && data[iog_max] != 0,
"There is a problem with the grids for the following interpolation:\n"
880 , which_interpolation,
"\n",
881 "\nThe the new grid is not fully inside the original grid.\n"
882 ,
"This is allowed if the corresponding boundary value of raw data is 0.\n"
883 ,
"New grid point: ", new_grid[ing_max],
"\n"
884 ,
"Old grid point: ", old_grid[iog_max],
"\n"
885 ,
"Boundary value: ", data[iog_max])
915 "The new grid is not allowed to be empty.");
918 "There is a problem with the grids for the following "
920 which_interpolation,
"\n"
921 "Interpolation order must be 0 or larger (but your's is ", order,
926 "There is a problem with the grids for the following "
928 , which_interpolation,
"\n"
929 ,
"For interpolation order ", order
930 ,
", the original grid must have at least\n"
931 , order + 1,
" elements (but your's has only ", n_old,
").")
934 const bool ascending = ((n_old > 1) ? (old_grid[0] <= old_grid[1]) :
true);
938 Numeric og_min = old_grid[0], og_max = old_grid[0];
943 "There is a problem with the grids for the "
944 ,
"following interpolation:\n"
945 , which_interpolation,
"\n"
946 ,
"The original grid must be strictly sorted\n"
947 ,
"(no duplicate values). Yours is:\n"
952 og_min = old_grid[0] - extpolfac * (old_grid[1] - old_grid[0]);
953 og_max = old_grid[n_old - 1] +
954 extpolfac * (old_grid[n_old - 1] - old_grid[n_old - 2]);
959 "There is a problem with the grids for the "
960 ,
"following interpolation:\n"
961 , which_interpolation,
"\n"
962 ,
"The original grid must be strictly sorted\n"
963 ,
"(no duplicate values). Yours is:\n"
969 og_max = old_grid[0] - extpolfac * (old_grid[1] - old_grid[0]);
970 og_min = old_grid[n_old - 1] +
971 extpolfac * (old_grid[n_old - 1] - old_grid[n_old - 2]);
984 "There is a problem with the grids for the "
985 ,
"following interpolation:\n"
986 , which_interpolation,
"\n"
987 ,
"The minimum of the new grid must be inside "
988 ,
"the original grid.\n(We allow a bit of extrapolation, "
989 ,
"but not so much).\n"
990 ,
"Minimum of original grid: ",
min(old_grid),
992 "\nMinimum allowed value for new grid: ", og_min,
994 "\nActual minimum of new grid: ", ng_min,
998 "There is a problem with the grids for the "
999 ,
"following interpolation:\n"
1000 , which_interpolation,
"\n"
1001 ,
"The maximum of the new grid must be inside\n"
1002 ,
"the original grid. (We allow a bit of extrapolation,\n"
1003 ,
"but not so much).\n"
1004 ,
"Maximum of original grid: ",
max(old_grid),
1006 "\nMaximum allowed value for new grid: ", og_max,
1008 "\nActual maximum of new grid: ", ng_max,
1078 which_interpolation, logold, lognew, order, extpolfac,
true);
1106 "The length of *p_grid* must be >= 2.");
1112 "For dim=1, the length of *lat_grid* must be 0.");
1115 "For dim>1, the length of *lat_grid* must be >= 2.");
1122 "For dim<3, the length of *lon_grid* must be 0.");
1125 "For dim=3, the length of *lon_grid* must be >= 2.");
1132 "The latitude grid cannot extend below -90 degrees for 3D");
1134 "The latitude grid cannot extend above 90 degrees for 3D");
1136 "No longitude (in lon_grid) can be below -360 degrees.");
1138 "No longitude (in lon_grid) can be above 360 degrees.");
1140 "The longitude grid is not allowed to cover more than 360 degrees.");
1168 const bool& chk_lat90) {
1170 Index npages = p_grid.
nelem(), nrows = 1, ncols = 1;
1171 if (dim > 1) nrows = lat_grid.
nelem();
1172 if (dim > 2) ncols = lon_grid.
nelem();
1174 "The atmospheric field *", x_name,
"* has wrong size.\n"
1175 ,
"Expected size is ", npages,
" x ", nrows,
" x ", ncols
1176 ,
", while actual size is ", x.
npages(),
" x ", x.
nrows(),
" x "
1180 for (
Index ip = 0; ip < npages; ip++) {
1181 for (
Index ir = 0; ir < nrows; ir++) {
1182 for (
Index ic = 0; ic < ncols; ic++) {
1184 "The variable *", x_name,
"* contains one or "
1185 ,
"several NaNs. This is not allowed!")
1194 const Index ic = ncols - 1;
1195 for (
Index ip = 0; ip < npages; ip++) {
1196 for (
Index ir = 0; ir < nrows; ir++) {
1198 x(ip, ir, ic), x(ip, ir, 0), 4 * DBL_EPSILON),
1199 "The variable *", x_name,
"* covers 360 "
1200 ,
"degrees in the longitude direction, but the field "
1201 ,
"seems to deviate between first and last longitude "
1202 ,
"point. The field must be \"cyclic\".\n"
1203 ,
"Difference: ", setprecision(16)
1204 , x(ip, ir, ic) - x(ip, ir, 0),
"\n"
1206 , 4 * DBL_EPSILON *
max(x(ip, ir, ic), x(ip, ir, 0)))
1214 if (lat_grid[0] == -90) {
1215 for (
Index ip = 0; ip < npages; ip++) {
1216 for (
Index ic = 1; ic < ncols; ic++) {
1218 x(ip, 0, ic), x(ip, 0, ic - 1), 2 * DBL_EPSILON),
1219 "The variable *", x_name,
"* covers the South\n"
1220 ,
"pole. The data corresponding to the pole can not\n"
1221 ,
"vary with longitude, but this appears to be the\n"
1232 if (lat_grid[nrows - 1] == 90) {
1233 const Index ir = nrows - 1;
1234 for (
Index ip = 0; ip < npages; ip++) {
1235 for (
Index ic = 1; ic < ncols; ic++) {
1237 x(ip, ir, ic), x(ip, ir, ic - 1), 2 * DBL_EPSILON),
1238 "The variable *", x_name,
"* covers the North\n"
1239 ,
"pole. The data corresponding to the pole can not\n"
1240 ,
"vary with longitude, but this appears to be the "
1276 const Index& nspecies,
1280 const bool& check_nan) {
1281 const Index nbooks = nspecies;
1285 "The atmospheric field *", x_name,
"* should be empty.\n")
1289 Index npages = p_grid.
nelem(), nrows = 1, ncols = 1;
1290 if (dim > 1) nrows = lat_grid.
nelem();
1291 if (dim > 2) ncols = lon_grid.
nelem();
1295 "The atmospheric field *", x_name,
"* has wrong size.\n"
1296 ,
"Expected size is ", nbooks,
" x ", npages,
" x ", nrows
1297 ,
" x ", ncols,
",\n"
1298 ,
"while actual size is ", x.
nbooks(),
" x ", x.
npages(),
" x "
1304 for (
Index ib = 0; ib < nbooks; ib++) {
1305 for (
Index ip = 0; ip < npages; ip++) {
1306 for (
Index ir = 0; ir < nrows; ir++) {
1307 for (
Index ic = 0; ic < ncols; ic++) {
1309 "The variable *", x_name,
"* contains one or "
1310 ,
"several NaNs. This is not allowed!")
1320 if ((lon_grid[ncols - 1] - lon_grid[0]) == 360) {
1321 const Index ic = ncols - 1;
1322 for (
Index is = 0; is < nspecies; is++) {
1323 for (
Index ip = 0; ip < npages; ip++) {
1324 for (
Index ir = 0; ir < nrows; ir++) {
1326 x(is, ip, ir, ic), x(is, ip, ir, 0), 2 * DBL_EPSILON),
1327 "The variable *", x_name,
"* covers 360 "
1328 ,
"degrees in the longitude direction, but at least "
1329 ,
"one field seems to deviate between first and last "
1330 ,
"longitude point. The field must be \"cyclic\". "
1331 ,
"This was found for field with index ", is
1338 if (lat_grid[0] == -90) {
1339 for (
Index is = 0; is < nspecies; is++) {
1340 for (
Index ip = 0; ip < npages; ip++) {
1341 for (
Index ic = 1; ic < ncols; ic++) {
1343 x(is, ip, 0, ic), x(is, ip, 0, ic - 1), 2 * DBL_EPSILON),
1344 "The variable *", x_name,
"* covers the South "
1345 ,
"pole. The data corresponding to the pole can not "
1346 ,
"vary with longitude, but this appears to be the "
1347 ,
"case. This was found for field with index ", is
1354 if (lat_grid[nrows - 1] == 90) {
1355 const Index ir = nrows - 1;
1356 for (
Index is = 0; is < nspecies; is++) {
1357 for (
Index ip = 0; ip < npages; ip++) {
1358 for (
Index ic = 1; ic < ncols; ic++) {
1360 x(is, ip, ir, ic - 1),
1362 "The variable *", x_name,
"* covers the North "
1363 ,
"pole. The data corresponding to the pole can not "
1364 ,
"vary with longitude, but this appears to be the "
1365 ,
"case. This was found for field with index ", is
1419 "The atmospheric fields *", x1_name,
"* and *", x2_name
1420 ,
"* do not match in size.\n"
1421 ,
"*", x1_name,
"*'s size is ", npages,
" x ", nrows
1422 ,
" x ", ncols,
", while *", x1_name,
"*'s size is "
1442 if (lat_grid[0] == -90) {
1444 for (
Index ip = 0; ip < npages; ip++) {
1445 for (
Index ic = 1; ic < ncols; ic++) {
1446 vec1 = x1(ip, 0, ic) * x1(ip, 0, ic) + x2(ip, 0, ic) * x2(ip, 0, ic);
1447 vec2 = x1(ip, 0, ic - 1) * x1(ip, 0, ic - 1) +
1448 x2(ip, 0, ic - 1) * x2(ip, 0, ic - 1);
1450 "The variables *", x1_name,
"* and *", x2_name
1452 ,
"to be two horizontal components of a vector field.\n"
1453 ,
"At the pole, the data (here: the total length of\n"
1454 ,
"the horizontal vector) can NOT vary with longitude,\n"
1455 ,
"but this appears to be the case on the South pole.\n"
1456 ,
"The threshold is ", threshold,
", but the actual\n"
1457 ,
"deviation at pressure level ", ip,
" and longitude\n"
1458 ,
"points ", ic - 1,
" and ", ic,
" is "
1464 if (lat_grid[nrows - 1] == 90) {
1466 const Index ir = nrows - 1;
1467 for (
Index ip = 0; ip < npages; ip++) {
1468 for (
Index ic = 1; ic < ncols; ic++) {
1470 x1(ip, ir, ic) * x1(ip, ir, ic) + x2(ip, ir, ic) * x2(ip, ir, ic);
1471 vec2 = x1(ip, ir, ic - 1) * x1(ip, ir, ic - 1) +
1472 x2(ip, ir, ic - 1) * x2(ip, ir, ic - 1);
1474 "The variables *", x1_name,
"* and *", x2_name
1476 ,
"to be two horizontal components of a vector field.\n"
1477 ,
"At the pole, the data (here: the total length of\n"
1478 ,
"the horizontal vector) can NOT vary with longitude,\n"
1479 ,
"but this appears to be the case on the North pole.\n"
1480 ,
"The threshold is ", threshold,
", but the actual\n"
1481 ,
"deviation at pressure level ", ip,
" and longitude\n"
1482 ,
"points ", ic - 1,
" and ", ic,
" is "
1507 if (atmosphere_dim == 1) {
1509 "For 1D, the method requires that *lat_true* "
1510 "and *lon_true* have length 1.");
1513 if (atmosphere_dim == 2) {
1516 "For 2D, the method requires that *lat_true* "
1517 "and *lon_true* have the same length as *lat_grid*.");
1541 Index ncols = 1, nrows = 1;
1542 if (dim > 1) nrows = lat_grid.
nelem();
1543 if (dim > 2) ncols = lon_grid.
nelem();
1545 "The surface variable *", x_name,
"* has wrong size.\n"
1546 ,
"Expected size is ", nrows,
" x ", ncols,
","
1547 ,
" while actual size is ", x.
nrows(),
" x ", x.
ncols(),
".")
1552 if ((lon_grid[ncols - 1] - lon_grid[0]) == 360) {
1553 const Index ic = ncols - 1;
1554 for (
Index ir = 0; ir < nrows; ir++) {
1556 "The variable *", x_name,
"* covers 360 "
1557 ,
"degrees in the longitude direction, but the field "
1558 ,
"seems to deviate between first and last longitude "
1559 ,
"point. The field must be \"cyclic\".")
1564 if (lat_grid[0] == -90) {
1565 for (
Index ic = 1; ic < ncols; ic++) {
1567 "The variable *", x_name,
"* covers the South "
1568 ,
"pole. The data corresponding to the pole can not "
1569 ,
"vary with longitude, but this appears to be the "
1574 if (lat_grid[nrows - 1] == 90) {
1575 const Index ir = nrows - 1;
1576 for (
Index ic = 1; ic < ncols; ic++) {
1578 x(ir, ic), x(ir, ic - 1), 2 * DBL_EPSILON),
1579 "The variable *", x_name,
"* covers the North "
1580 ,
"pole. The data corresponding to the pole can not "
1581 ,
"vary with longitude, but this appears to be the "
1607 const bool& is_rte_pos2)
1610 String vname =
"*rte_pos*";
1612 vname =
"*rte_pos2*";
1615 if (atmosphere_dim == 1) {
1618 "For 1D, ", vname,
" must have length 1.")
1621 "For 1D, ", vname,
" must have length 2.")
1623 "For 1D, the latitude in ", vname,
" must be in the "
1624 ,
"range [-180,180].")
1626 }
else if (atmosphere_dim == 2) {
1628 "For 2D, ", vname,
" must have length 2.")
1631 "For 3D, ", vname,
" must have length 3.")
1633 "The (3D) latitude in ", vname,
" must be in the "
1634 ,
"range [-90,90].")
1636 "The longitude in ", vname,
" must be in the "
1637 ,
"range [-360,360].")
1656 if (atmosphere_dim == 1) {
1658 "For 1D, los-vectors must have length 1.");
1660 "For 1D, the zenith angle of a los-vector must "
1661 "be in the range [0,180].");
1662 }
else if (atmosphere_dim == 2) {
1664 "For 2D, los-vectors must have length 1.");
1666 "For 2D, the zenith angle of a los-vector must "
1667 "be in the range [-180,180].");
1670 "For 3D, los-vectors must have length 2.");
1672 "For 3D, the zenith angle of a los-vector must "
1673 "be in the range [0,180].");
1675 "For 3D, the azimuth angle of a los-vector must "
1676 "be in the range [-180,180].");
1695 const Index gridindex,
1696 const String& gridname) {
1698 "Grid index ", gridindex,
" exceeds dimension of GriddedField",
1704 String gridnameupper = gridname;
1708 "Name of grid ", gridindex,
" in GriddedField",
1711 ,
"The expected name is \"", gridname,
"\".")
1730 "No channels defined in *met_mm_backend*.");
1733 "*met_mm_backend* must have 4 columns.");
1739 Numeric bandwidth = mmb(ch, 3);
1743 "Error in channel ", ch + 1,
" at row ", ch
1744 ,
" in *met_mm_backend*.\n"
1745 ,
"Center frequency is negative: ", mmb(ch, 0),
" Hz")
1749 "Error in channel ", ch + 1,
" at row ", ch
1750 ,
" in *met_mm_backend*.\n"
1751 ,
"Offset is negative:\n"
1752 ,
"offset1: ", offset1,
" Hz\n"
1753 ,
"offset2: ", offset2,
" Hz\n")
1757 "Error in channel ", ch + 1,
" at row ", ch
1758 ,
" in *met_mm_backend*.\n"
1759 ,
"First passband offset is smaller than/equal to the second offset:\n"
1760 ,
"offset1: ", offset1,
" Hz\n"
1761 ,
"offset2: ", offset2,
" Hz\n")
1765 "Error in channel ", ch + 1,
" at row ", ch
1766 ,
" in *met_mm_backend*.\n"
1767 ,
"Band touches or overlaps with the center frequency:\n"
1768 ,
"offset1 : ", offset1,
" Hz\n"
1769 ,
"offset2 : ", offset2,
" Hz\n"
1770 ,
"bandwidth : ", bandwidth,
" Hz\n"
1771 ,
"offset1 - offset2 - bandwidth/2: "
1772 , offset1 - offset2 - bandwidth / 2.,
" Hz\n")
1776 "Error in channel ", ch + 1,
" at row ", ch
1777 ,
" in *met_mm_backend*.\n"
1778 ,
"Bands overlap or touch, offset2 > bandwidth/2:\n"
1779 ,
"offset2 : ", offset2,
" Hz\n"
1780 ,
"bandwidth/2: ", bandwidth / 2.,
" Hz\n")
1784 "Error in channel ", ch + 1,
" at row ", ch
1785 ,
" in *met_mm_backend*.\n"
1786 ,
"Band too wide, reaches/exceeds 0 Hz:\n"
1787 ,
"LO : ", lo,
" Hz\n"
1788 ,
"offset1 : ", offset1,
" Hz\n"
1789 ,
"offset2 : ", offset2,
" Hz\n"
1790 ,
"bandwidth : ", bandwidth,
" Hz\n"
1791 ,
"LO - offset1 - offset2 - bandwidth/2: "
1792 , lo - offset1 - offset2 - bandwidth / 2.,
" Hz\n")
This file contains the definition of Array.
base max(const Array< base > &x)
Max function.
base min(const Array< base > &x)
Min function.
Index nelem() const
Return the number of agenda elements.
A constant view of a Matrix.
Index nrows() const noexcept
Index ncols() const noexcept
A constant view of a Tensor3.
Index npages() const
Returns the number of pages.
Index nrows() const
Returns the number of rows.
Index ncols() const
Returns the number of columns.
A constant view of a Tensor4.
Index ncols() const noexcept
Index nrows() const noexcept
Index nbooks() const noexcept
Index npages() const noexcept
A constant view of a Tensor5.
Index nrows() const noexcept
Index ncols() const noexcept
Index npages() const noexcept
Index nbooks() const noexcept
Index nshelves() const noexcept
A constant view of a Tensor6.
Index nbooks() const noexcept
Index nvitrines() const noexcept
Index ncols() const noexcept
Index npages() const noexcept
Index nshelves() const noexcept
Index nrows() const noexcept
A constant view of a Tensor7.
Index ncols() const noexcept
Index npages() const noexcept
Index nrows() const noexcept
Index nlibraries() const noexcept
Index nvitrines() const noexcept
Index nshelves() const noexcept
Index nbooks() const noexcept
A constant view of a Vector.
Index nelem() const noexcept
Returns the number of elements.
const String & get_name() const
Get the name of this gridded field.
Index get_dim() const
Get the dimension of this gridded field.
const String & get_grid_name(Index i) const
Get grid name.
void toupper()
Convert to upper case.
std::string var_string(Args &&... args)
#define ARTS_USER_ERROR_IF(condition,...)
Implementation of gridded fields.
bool is_increasing(ConstVectorView x)
Checks if a vector is sorted and strictly increasing.
bool is_bool(const Index &x)
Checks if a variable equals 0 or 1.
bool is_decreasing(ConstVectorView x)
Checks if a vector is sorted in reversed order and is strictly decreasing.
bool is_size(ConstVectorView x, const Index &n)
Verifies that the size of x is l.
bool is_same_within_epsilon(const Numeric &a, const Numeric &b, const Numeric &epsilon)
Check, if two numbers agree within a given epsilon.
bool is_lon_cyclic(ConstVectorView grid, const Numeric &epsilon)
Check if the given longitude grid is cyclic.
Header file for logic.cc.
void abs(Sparse &A, const Sparse &B)
Absolute value of sparse matrix elements.
void transform(VectorView y, double(&my_func)(double), ConstVectorView x)
A generic transform function for vectors, which can be used to implement mathematical functions opera...
NUMERIC Numeric
The type to use for all floating point numbers.
INDEX Index
The type to use for all integer numbers and indices.
constexpr Index GFIELD3_LON_GRID
Global constant, Index of the longitude grid in GriddedField3.
constexpr Index GFIELD3_P_GRID
Global constant, Index of the pressure grid in GriddedField3.
constexpr Index GFIELD3_LAT_GRID
Global constant, Index of the latitude grid in GriddedField3.
Numeric sqrt(const Rational r)
Square root.