From f7fdc7653756fcc223ce1a3685a2bff8bd2b24ae Mon Sep 17 00:00:00 2001 From: Uwe Schulzweida <uwe.schulzweida@mpimet.mpg.de> Date: Wed, 26 Feb 2025 08:55:25 +0100 Subject: [PATCH 1/2] cdo_cmpstr: changed parameter type to std::string_view --- src/after_sptrans.cc | 1 + src/compare.h | 11 ++--------- src/grid_from_name.cc | 10 +++++----- 3 files changed, 8 insertions(+), 14 deletions(-) diff --git a/src/after_sptrans.cc b/src/after_sptrans.cc index 63a1e2765..979dc20be 100644 --- a/src/after_sptrans.cc +++ b/src/after_sptrans.cc @@ -6,6 +6,7 @@ */ #include <cmath> +#include <cstring> #include "cdo_options.h" #include "cdo_omp.h" diff --git a/src/compare.h b/src/compare.h index 86364a9e4..8e8ac6375 100644 --- a/src/compare.h +++ b/src/compare.h @@ -2,8 +2,7 @@ #define COMPARE_H #include <cmath> -#include <cstring> -#include <string> +#include <string_view> // compare // clang-format off @@ -15,13 +14,7 @@ const auto fp_is_equal = [](auto a, auto b) noexcept { return ((std::isnan( // clang-format on static inline bool -cdo_cmpstr(const char *x, const char *y) -{ - return (strcmp(x, y) == 0); -} - -static inline bool -cdo_cmpstr(std::string_view lhs, const std::string &rhs) +cdo_cmpstr(std::string_view lhs, std::string_view rhs) { return (lhs.compare(rhs) == 0); } diff --git a/src/grid_from_name.cc b/src/grid_from_name.cc index d4da98ec6..9e3492fab 100644 --- a/src/grid_from_name.cc +++ b/src/grid_from_name.cc @@ -533,15 +533,15 @@ generate_grid_gaussian(GridDesciption &grid, std::string gridname) if (gridname.size()) { - int intVal = 0; + int intValue = 0; std::vector<char> typeString(gridname.size(), 0); - auto numVals = sscanf(gridname.c_str(), "%d%s", &intVal, typeString.data()); + auto numValues = sscanf(gridname.c_str(), "%d%s", &intValue, typeString.data()); // printf("%s: %d %d%s\n", gridname.c_str(), numVals, intVal, typeString.data()); - if (numVals <= 0 || numVals > 2) return; - if (intVal < 0) return; + if (numValues <= 0 || numValues > 2) return; + if (intValue < 0) return; - grid.ntr = intVal; + grid.ntr = intValue; // clang-format off if (cdo_cmpstr(typeString.data(), "grid")) grid.type = GRID_GAUSSIAN; else if (cdo_cmpstr(typeString.data(), "zon")) grid.type = GRID_GAUSSIAN; -- GitLab From 082de0752600d198b4a46957f456139bec4e45ce Mon Sep 17 00:00:00 2001 From: Uwe Schulzweida <uwe.schulzweida@mpimet.mpg.de> Date: Wed, 26 Feb 2025 10:36:49 +0100 Subject: [PATCH 2/2] include csdtio --- src/Eofcoeff3d.cc | 82 +++++++++++++++++++++++------------------------ src/statistic.cc | 1 + 2 files changed, 41 insertions(+), 42 deletions(-) diff --git a/src/Eofcoeff3d.cc b/src/Eofcoeff3d.cc index 576138b0a..bfc89bb90 100644 --- a/src/Eofcoeff3d.cc +++ b/src/Eofcoeff3d.cc @@ -36,7 +36,6 @@ public: inline static RegisterEntry<Eofcoeff3d> registration = RegisterEntry<Eofcoeff3d>(module); double missval1 = -999, missval2 = -999; - int varID, levelID; int numFields; CdoStreamID streamID1; @@ -63,8 +62,6 @@ public: std::vector<CdoStreamID> streamIDs; - int eofID = 0; - public: void init() override @@ -98,36 +95,39 @@ public: fileSuffix = FileUtils::gen_suffix(cdo_inq_filetype(streamID1), vlistID1, cdo_get_stream_name(0)); eof = FieldVector3D(numVars); - for (varID = 0; varID < numVars; ++varID) eof[varID].resize(numLevels); + for (int varID = 0; varID < numVars; ++varID) eof[varID].resize(numLevels); } void run() override { - while (1) - { - numFields = cdo_stream_inq_timestep(streamID1, eofID); - if (numFields == 0) break; - - for (int fieldID = 0; fieldID < numFields; ++fieldID) - { - cdo_inq_field(streamID1, &varID, &levelID); - missval1 = varList1.vars[varID].missval; - eof[varID][levelID].resize((eofID == 0) ? 1 : eofID + 1); - eof[varID][levelID][eofID].grid = gridID1; - eof[varID][levelID][eofID].missval = missval1; - eof[varID][levelID][eofID].resize(gridsize); - ranges::fill(eof[varID][levelID][eofID].vec_d, missval1); - - if (varID >= numVars) cdo_abort("Internal error - varID >= nvars"); - if (levelID >= numLevels) cdo_abort("Internal error - levelID >= nlevs"); - - cdo_read_field(streamID1, eof[varID][levelID][eofID]); - } - eofID++; - } + { + int eofID = 0; + while (1) + { + numFields = cdo_stream_inq_timestep(streamID1, eofID); + if (numFields == 0) break; + + for (int fieldID = 0; fieldID < numFields; ++fieldID) + { + auto [varID, levelID] = cdo_inq_field(streamID1); + missval1 = varList1.vars[varID].missval; + eof[varID][levelID].resize((eofID == 0) ? 1 : eofID + 1); + eof[varID][levelID][eofID].grid = gridID1; + eof[varID][levelID][eofID].missval = missval1; + eof[varID][levelID][eofID].resize(gridsize); + ranges::fill(eof[varID][levelID][eofID].vec_d, missval1); + + if (varID >= numVars) cdo_abort("Internal error - varID >= nvars"); + if (levelID >= numLevels) cdo_abort("Internal error - levelID >= nlevs"); + + cdo_read_field(streamID1, eof[varID][levelID][eofID]); + } + eofID++; + } - neof = eofID; + neof = eofID; + } if (Options::cdoVerbose) cdo_print("%s contains %i eof's", cdo_get_stream_name(0), neof); // Create 1x1 Grid for output @@ -156,12 +156,12 @@ public: for (int i = 0; i < numZaxes; ++i) vlistChangeZaxisIndex(vlistID3, i, zaxisID3); vlistDefTaxis(vlistID3, taxisID3); - for (varID = 0; varID < numVars; ++varID) vlistDefVarTimetype(vlistID3, varID, TIME_VARYING); + for (int varID = 0; varID < numVars; ++varID) vlistDefVarTimetype(vlistID3, varID, TIME_VARYING); // open streams for eofcoeff output streamIDs = std::vector<CdoStreamID>(neof); - for (eofID = 0; eofID < neof; eofID++) + for (int eofID = 0; eofID < neof; eofID++) { auto fileName = cdo_get_obase() + string_format("%5.5i", eofID); if (fileSuffix.size() > 0) fileName += fileSuffix; @@ -179,10 +179,10 @@ public: in.resize(gridsize); in.grid = gridID1; FieldVector2D out(numVars); - for (varID = 0; varID < numVars; ++varID) + for (int varID = 0; varID < numVars; ++varID) { out[varID].resize(neof); - for (eofID = 0; eofID < neof; eofID++) + for (int eofID = 0; eofID < neof; eofID++) { out[varID][eofID].missval = missval1; out[varID][eofID].numMissVals = 0; @@ -196,8 +196,8 @@ public: numFields = cdo_stream_inq_timestep(streamID2, tsID); if (numFields == 0) break; - for (varID = 0; varID < numVars; ++varID) - for (eofID = 0; eofID < neof; eofID++) + for (int varID = 0; varID < numVars; ++varID) + for (int eofID = 0; eofID < neof; eofID++) { out[varID][eofID].vec_d[0] = 0; out[varID][eofID].grid = gridID3; @@ -208,16 +208,15 @@ public: for (int fieldID = 0; fieldID < numFields; ++fieldID) { - cdo_inq_field(streamID2, &varID, &levelID); + auto [varID, levelID] = cdo_inq_field(streamID2); cdo_read_field(streamID2, in); missval2 = varList2.vars[varID].missval; - size_t numMissVals; - for (eofID = 0; eofID < neof; eofID++) + for (int eofID = 0; eofID < neof; eofID++) { if (fieldID == 0) cdo_def_timestep(streamIDs[eofID], tsID); - numMissVals = 0; + // size_t numMissVals = 0; for (size_t i = 0; i < gridsize; ++i) { if (!fp_is_equal(in.vec_d[i], missval2) && !fp_is_equal(eof[varID][levelID][eofID].vec_d[i], missval1)) @@ -225,8 +224,7 @@ public: // out[varID][eofID].vec_d[0] += w[i]*in.vec_d[i]*eof[varID][levelID][eofID].vec_d[i]; out[varID][eofID].vec_d[0] += in.vec_d[i] * eof[varID][levelID][eofID].vec_d[i]; } - else - numMissVals += 1; + // else { numMissVals += 1; } } /* if ( numMissVals ) { @@ -240,9 +238,9 @@ public: if (levelID >= numLevels) cdo_abort("Internal error - levelID >= nlevs"); } - for (eofID = 0; eofID < neof; eofID++) + for (int eofID = 0; eofID < neof; eofID++) { - for (varID = 0; varID < numVars; ++varID) + for (int varID = 0; varID < numVars; ++varID) { cdo_def_field(streamIDs[eofID], varID, 0); cdo_write_field(streamIDs[eofID], out[varID][eofID]); @@ -256,7 +254,7 @@ public: void close() override { - for (eofID = 0; eofID < neof; eofID++) cdo_stream_close(streamIDs[eofID]); + for (int eofID = 0; eofID < neof; eofID++) cdo_stream_close(streamIDs[eofID]); cdo_stream_close(streamID2); cdo_stream_close(streamID1); diff --git a/src/statistic.cc b/src/statistic.cc index f3aabbe3e..3e13208e9 100644 --- a/src/statistic.cc +++ b/src/statistic.cc @@ -2,6 +2,7 @@ #include <cfloat> #include <cmath> +#include <cstdio> #include "compare.h" #include "statistic.h" -- GitLab