From fd96c9e4291889e5f3e34c0a691d5e8959623d4e Mon Sep 17 00:00:00 2001
From: Uwe Schulzweida <uwe.schulzweida@mpimet.mpg.de>
Date: Thu, 15 Aug 2024 14:17:55 +0200
Subject: [PATCH] Fix cppchecker warnings

---
 src/Afterburner.cc      |   6 +-
 src/Arithdays.cc        |  16 ++---
 src/Cat.cc              |   2 +-
 src/Collgrid.cc         |   4 +-
 src/Copy.cc             |   2 +-
 src/DCW_util.cc         |   4 +-
 src/Detrend.cc          |   7 +--
 src/Diff.cc             |   6 +-
 src/Distgrid.cc         |  12 ++--
 src/Echam5ini.cc        |   5 +-
 src/Ensval.cc           |   8 +--
 src/Exprf.cc            |  10 ++--
 src/Fldstat.cc          |   6 +-
 src/Gridsearch.cc       |   6 +-
 src/Healpix.cc          |   4 +-
 src/Importbinary.cc     |   3 +-
 src/Importcmsaf.cc      |  14 ++---
 src/Info.cc             |  10 ++--
 src/Input.cc            |   4 +-
 src/Intgrid.cc          |  47 ++++++++-------
 src/Intlevel.cc         |   8 +--
 src/Intlevel3d.cc       |   6 +-
 src/Merge.cc            |   2 +-
 src/Mergetime.cc        |   2 +-
 src/Ninfo.cc            |  84 +++++++++++++-------------
 src/Outputgmt.cc        |  15 +++--
 src/Pack.cc             |   4 +-
 src/Remapeta.cc         |   4 +-
 src/Remapgrid.cc        |   4 +-
 src/Remapstat.cc        |  27 +++++----
 src/Runstat.cc          |   2 +-
 src/Selbox.cc           |   2 +-
 src/Selgridcell.cc      |   2 +-
 src/Selregion.cc        |   4 +-
 src/Setfilter.cc        |   7 ++-
 src/Setgrid.cc          |   2 +-
 src/Smooth.cc           |   4 +-
 src/Split.cc            |  18 +++---
 src/Vargen.cc           |   6 +-
 src/Vertintml.cc        |   6 +-
 src/cdo_fftw3.cc        |   2 +-
 src/cdo_getopt.cc       |  14 ++---
 src/cdo_stepstat.h      | 127 ++++++++++++++++++++--------------------
 src/cdo_varlist.cc      |   2 +-
 src/expr.cc             |  12 ++--
 src/field.cc            |  64 ++++++++++----------
 src/field2.cc           |  24 ++++----
 src/field_meridional.cc |  10 ++--
 src/field_trend.cc      |   2 +-
 src/field_zonal.cc      |   2 +-
 src/param_conversion.cc |   2 +-
 src/process.cc          |   2 +-
 src/process.h           |   2 +-
 src/remap_bicubic.cc    |   5 +-
 src/remap_bilinear.cc   |   5 +-
 src/remap_conserv.cc    |   4 +-
 src/remap_distwgt.cc    |   2 +-
 src/remap_vars.cc       |   6 +-
 src/remaplib.cc         |   4 +-
 src/util_string.h       |   2 +-
 60 files changed, 342 insertions(+), 336 deletions(-)

diff --git a/src/Afterburner.cc b/src/Afterburner.cc
index 7d22cc24c..6d070c2a1 100644
--- a/src/Afterburner.cc
+++ b/src/Afterburner.cc
@@ -1235,9 +1235,9 @@ after_dimcalc(AfterControl &globs)
 
   globs.Waves = globs.Truncation + 1;
   globs.Fouriers = globs.Waves * 2;
-  globs.DimSP = (globs.Truncation + 1) * (globs.Truncation + 2);
-  globs.DimFC = globs.Latitudes * globs.Fouriers;
-  globs.DimGP = globs.Latitudes * globs.Longitudes;
+  globs.DimSP = ((long) globs.Truncation + 1) * ((long) globs.Truncation + 2);
+  globs.DimFC = (long) globs.Latitudes * (long) globs.Fouriers;
+  globs.DimGP = (long) globs.Latitudes * (long) globs.Longitudes;
   globs.Dim3GP = globs.NumLevel * globs.DimGP;
   globs.Dim3FC = globs.NumLevel * globs.DimFC;
   globs.Dim3SP = globs.NumLevel * globs.DimSP;
diff --git a/src/Arithdays.cc b/src/Arithdays.cc
index 7890cb797..8fdd76030 100644
--- a/src/Arithdays.cc
+++ b/src/Arithdays.cc
@@ -26,22 +26,22 @@
 static double
 dayofyear(int calendar, const CdiDateTime &vDateTime)
 {
-  const int month_360[12] = { 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30 };
-  const int month_365[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
-  const int month_366[12] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
+  constexpr int month_360[12] = { 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30 };
+  constexpr int month_365[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
+  constexpr int month_366[12] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
 
   int year, month, day;
   int hour, minute, second, ms;
   cdiDate_decode(vDateTime.date, &year, &month, &day);
   cdiTime_decode(vDateTime.time, &hour, &minute, &second, &ms);
 
-  const auto dpy = days_per_year(calendar, year);
+  auto dpy = days_per_year(calendar, year);
 
   double doy = 0.0;
   for (int im = 1; im < month; ++im)
     {
       auto dpm = (dpy == 360) ? month_360 : ((dpy == 365) ? month_365 : month_366);
-      if (im >= 1 && im <= 12) doy += dpm[im - 1];
+      if (im <= 12) doy += dpm[im - 1];
     }
 
   doy += (day - 1);
@@ -75,6 +75,7 @@ public:
     .constraints = { 1, 1, NoRestriction },
   };
   inline static RegisterEntry<Arithdays> registration = RegisterEntry<Arithdays>(module);
+
   int MULDOY;
 
   CdoStreamID streamID1;
@@ -130,7 +131,7 @@ public:
         auto nrecs = cdo_stream_inq_timestep(streamID1, tsID);
         if (nrecs == 0) break;
 
-        const auto vDateTime = taxisInqVdatetime(taxisID1);
+        auto vDateTime = taxisInqVdatetime(taxisID1);
 
         cdo_taxis_copy_timestep(taxisID2, taxisID1);
         cdo_def_timestep(streamID2, tsID);
@@ -148,8 +149,7 @@ public:
 
         for (int recID = 0; recID < nrecs; ++recID)
           {
-            int varID, levelID;
-            cdo_inq_record(streamID1, &varID, &levelID);
+            auto [varID, levelID] = cdo_inq_record(streamID1);
             field.init(varList1.vars[varID]);
             cdo_read_record(streamID1, field);
 
diff --git a/src/Cat.cc b/src/Cat.cc
index 5c56f0278..494ad73fe 100644
--- a/src/Cat.cc
+++ b/src/Cat.cc
@@ -78,7 +78,6 @@ public:
 
         if (indf == 0)
           {
-            auto numVars = varList1.numVars();
             auto numSteps = varList1.numSteps();
             if (numSteps == 1 && varList1.numVaryingVars() == 0) numSteps = 0;
 
@@ -110,6 +109,7 @@ public:
                 if (numSteps == 0 && numFiles > 1)
                   {
                     hasConstVars = false;
+                    auto numVars = varList1.numVars();
                     for (int varID = 0; varID < numVars; ++varID) vlistDefVarTimetype(vlistID2, varID, TIME_VARYING);
                   }
 
diff --git a/src/Collgrid.cc b/src/Collgrid.cc
index 787209614..6c3d01c04 100644
--- a/src/Collgrid.cc
+++ b/src/Collgrid.cc
@@ -276,7 +276,7 @@ coll_cells_reg2d(const Field &field1, Field &field2, const CollgridInfo &collgri
       auto offset1 = j * nx;
       auto offset2 = collgridInfo.offset + j * nlon;
 
-      auto func = [&](auto &v1, auto &v2, auto n) {
+      auto func = [&](const auto &v1, auto &v2, auto n) {
         for (size_t i = 0; i < nx; ++i) { v2[offset2 + i] = v1[offset1 + i]; }
       };
       field_operation2(func, field1, field2);
@@ -286,7 +286,7 @@ coll_cells_reg2d(const Field &field1, Field &field2, const CollgridInfo &collgri
 static void
 collect_cells(const Field &field1, Field &field2, const std::vector<long> &cellIndex)
 {
-  auto func = [&](auto &v1, auto &v2, auto n) {
+  auto func = [&](const auto &v1, auto &v2, auto n) {
     for (size_t i = 0; i < n; ++i) { v2[cellIndex[i]] = v1[i]; }
   };
   field_operation2(func, field1, field2, field1.size);
diff --git a/src/Copy.cc b/src/Copy.cc
index 373f542e5..7cf31ead3 100644
--- a/src/Copy.cc
+++ b/src/Copy.cc
@@ -118,13 +118,13 @@ public:
             taxisID2 = taxisDuplicate(taxisID1);
             vlistDefTaxis(vlistID2, taxisID2);
 
-            auto numVars = varList1.numVars();
             auto numSteps = varList1.numSteps();
             if (numSteps == 1 && varList1.numVaryingVars() == 0) numSteps = 0;
 
             if (numSteps == 0 && numFiles > 1)
               {
                 hasConstantFields = false;
+                auto numVars = varList1.numVars();
                 for (int varID = 0; varID < numVars; ++varID) vlistDefVarTimetype(vlistID2, varID, TIME_VARYING);
               }
           }
diff --git a/src/DCW_util.cc b/src/DCW_util.cc
index 965cdca77..1818fe69c 100644
--- a/src/DCW_util.cc
+++ b/src/DCW_util.cc
@@ -18,7 +18,7 @@ print_polygons(DCW_Lists &dcw_lists, const std::string &codeNames)
 
   printf("# Digital Chart of the World\n");
   printf("# Region for country:");
-  for (auto &code : codeList) printf(" %s", code.c_str());
+  for (const auto &code : codeList) printf(" %s", code.c_str());
   printf("\n");
 
   codeList = dcw_expand_code_list(dcw_lists, codeList);
@@ -38,7 +38,7 @@ public:
   using Process::Process;
   inline static CdoModule module = {
     .name = "DCW_util",
-    .operators = { { "dcw"} },
+    .operators = { { "dcw" } },
     .aliases = {},
     .mode = EXPOSED,     // Module mode: 0:intern 1:extern
     .number = CDI_REAL,  // Allowed number type
diff --git a/src/Detrend.cc b/src/Detrend.cc
index 66a9bd4af..b064a2b98 100644
--- a/src/Detrend.cc
+++ b/src/Detrend.cc
@@ -156,8 +156,8 @@ public:
         for (int levelID = 0; levelID < var.nlevels; ++levelID)
           {
             auto &field = varsData[varID][levelID];
-            auto &paramA = work[0][varID][levelID];
-            auto &paramB = work[1][varID][levelID];
+            const auto &paramA = work[0][varID][levelID];
+            const auto &paramB = work[1][varID][levelID];
             sub_trend(zj, field, paramA, paramB);
           }
       }
@@ -173,8 +173,7 @@ public:
         if (var.isConstant) continue;
         for (int levelID = 0; levelID < var.nlevels; ++levelID)
           {
-            auto &field = varsData[varID][levelID];
-            calc_trend_sum(work, field, zj, varID, levelID);
+            calc_trend_sum(work, varsData[varID][levelID], zj, varID, levelID);
           }
       }
   }
diff --git a/src/Diff.cc b/src/Diff.cc
index a7f855dea..e1999ae8c 100644
--- a/src/Diff.cc
+++ b/src/Diff.cc
@@ -81,14 +81,14 @@ diff(size_t n, const Field &field1, const Field &field2)
   auto hasMissvals = (field1.numMissVals || field2.numMissVals);
   if (hasMissvals)
     {
-      auto func = [&](auto &v1, auto &v2, double mv1, double mv2) {
+      auto func = [&](const auto &v1, const auto &v2, double mv1, double mv2) {
         for (size_t i = 0; i < n; ++i) { diff_kernel_mv(v1[i], v2[i], mv1, mv2, diffParam); }
       };
       field_operation2(func, field1, field2, field1.missval, field2.missval);
     }
   else
     {
-      auto func = [&](auto &v1, auto &v2) {
+      auto func = [&](const auto &v1, const auto &v2) {
         for (size_t i = 0; i < n; ++i) { diff_kernel(v1[i], v2[i], diffParam); }
       };
       field_operation2(func, field1, field2);
@@ -133,7 +133,7 @@ diff2(size_t n, const Field &field1, const Field &field2)
     }
   else
     {
-      auto func = [&](auto &v1, auto &v2) {
+      auto func = [&](const auto &v1, const auto &v2) {
         for (size_t i = 0; i < n; ++i) { diff_kernel2(v1[i], v2[i], diffParam); }
       };
       field_operation2(func, field1, field2);
diff --git a/src/Distgrid.cc b/src/Distgrid.cc
index b7a3de6f2..de79c28a7 100644
--- a/src/Distgrid.cc
+++ b/src/Distgrid.cc
@@ -311,7 +311,7 @@ dist_cells_reg2d(const Field &field1, Field &field2, const DistgridInfo &distgri
       auto offset1 = distgridInfo.offset + j * nlon;
       auto offset2 = j * nx;
 
-      auto func = [&](auto &v1, auto &v2) {
+      auto func = [&](const auto &v1, auto &v2) {
         for (size_t i = 0; i < nx; ++i) { v2[offset2 + i] = v1[offset1 + i]; }
       };
       field_operation2(func, field1, field2);
@@ -324,7 +324,7 @@ dist_cells(const Field &field1, Field &field2, const DistgridInfo &distgridInfo)
   auto gridsize = distgridInfo.gridsize;
   const auto &cellIndex = distgridInfo.cellindex;
 
-  auto func = [&](auto &v1, auto &v2) {
+  auto func = [&](const auto &v1, auto &v2) {
     for (size_t i = 0; i < gridsize; ++i) { v2[i] = v1[cellIndex[i]]; }
   };
   field_operation2(func, field1, field2);
@@ -351,7 +351,7 @@ public:
   CdoStreamID streamID1;
   std::vector<CdoStreamID> streamIDs;
 
-  unsigned long nsplit;
+  size_t nsplit;
 
   std::vector<int> vlistIDs;
   std::vector<GridInfo1> gridInfo1;
@@ -504,7 +504,7 @@ public:
         auto nrecs = cdo_stream_inq_timestep(streamID1, tsID);
         if (nrecs == 0) break;
 
-        for (auto &streamID : streamIDs) cdo_def_timestep(streamID, tsID);
+        for (const auto &streamID : streamIDs) cdo_def_timestep(streamID, tsID);
 
         for (int recID = 0; recID < nrecs; ++recID)
           {
@@ -544,8 +544,8 @@ public:
   {
     cdo_stream_close(streamID1);
 
-    for (auto &streamID : streamIDs) cdo_stream_close(streamID);
-    for (auto &vlistID : vlistIDs) vlistDestroy(vlistID);
+    for (const auto &streamID : streamIDs) cdo_stream_close(streamID);
+    for (const auto &vlistID : vlistIDs) vlistDestroy(vlistID);
 
     for (int i = 0; i < ngrids; ++i)
       for (size_t index = 0; index < nsplit; ++index) gridDestroy(distgridInfo[i][index].gridID);
diff --git a/src/Echam5ini.cc b/src/Echam5ini.cc
index 9af42fd71..e5b75c2c8 100644
--- a/src/Echam5ini.cc
+++ b/src/Echam5ini.cc
@@ -57,10 +57,6 @@ struct ATTS
   int naint;
   int naflt;
   int natxt;
-  char *aintname[1024];
-  int *aintentry[1024];
-  char *afltname[1024];
-  double *afltentry[1024];
   char *atxtname[1024];
   char *atxtentry[1024];
 };
@@ -805,6 +801,7 @@ public:
     im_e5ml();
   }
 };
+
 class Echam5ini_export : public Echam5ini
 {
 public:
diff --git a/src/Ensval.cc b/src/Ensval.cc
index 8254041f3..b196e7055 100644
--- a/src/Ensval.cc
+++ b/src/Ensval.cc
@@ -448,15 +448,13 @@ public:
                     cdo_abort("This is likely due to missing values");
                   }
 
-                double o = 0, p = 0, g = 0;
                 brs_uncty = obar * (1 - obar);
 
                 for (int k = 0; k <= nens; ++k)
                   {
-
-                    g = brs_g[k];
-                    o = brs_o[k];
-                    p = 1.0 - k / (float) nens;
+                    auto g = brs_g[k];
+                    auto o = brs_o[k];
+                    auto p = 1.0 - k / (float) nens;
                     // need p = 1 - k/nens here as k=0 if all members forecast
                     // event and k=nens if none does so.
 
diff --git a/src/Exprf.cc b/src/Exprf.cc
index ac38e119d..caa9271b5 100644
--- a/src/Exprf.cc
+++ b/src/Exprf.cc
@@ -87,7 +87,7 @@ replace_all(std::string &inout, const std::string &what, const std::string &with
 }
 
 static std::string
-exprs_expand(std::string &exprString, const VarList &varList)
+exprs_expand(const std::string &exprString, const VarList &varList)
 {
   auto replaceTemplate = false;
   std::string templateName = "_ALL_";
@@ -109,7 +109,7 @@ exprs_expand(std::string &exprString, const VarList &varList)
     {
       std::string exprStringNew{};
       auto exprStringArgv = split_with_seperator(exprString, ';');
-      for (auto &string : exprStringArgv)
+      for (const auto &string : exprStringArgv)
         {
           if (string.find(templateName) == std::string::npos) { exprStringNew += string + ";"; }
           else
@@ -157,7 +157,7 @@ params_init(std::vector<ParamEntry> &params, const VarList &varList)
 static void
 params_delete(const std::vector<ParamEntry> &params)
 {
-  for (auto &param : params)
+  for (const auto &param : params)
     {
       if (param.data) delete[] param.data;
     }
@@ -573,7 +573,7 @@ public:
                 auto coordID = params_get_coord_ID(parseArg, coord, params[varID].gridID);
                 auto gridID = parseArg.coords[coordID].cdiID;
                 auto ngp = parseArg.coords[coordID].size;
-                auto &cdata = parseArg.coords[coordID].data;
+                const auto &cdata = parseArg.coords[coordID].data;
                 assert(gridID == params[varID].gridID);
                 assert(!cdata.empty());
 
@@ -584,7 +584,7 @@ public:
                 auto coordID = params_get_coord_ID(parseArg, coord, params[varID].zaxisID);
                 auto zaxisID = parseArg.coords[coordID].cdiID;
                 auto nlev = parseArg.coords[coordID].size;
-                auto &cdata = parseArg.coords[coordID].data;
+                const auto &cdata = parseArg.coords[coordID].data;
                 assert(zaxisID == params[varID].zaxisID);
                 assert(!cdata.empty());
 
diff --git a/src/Fldstat.cc b/src/Fldstat.cc
index 8dcd37d4e..2736bbc1c 100644
--- a/src/Fldstat.cc
+++ b/src/Fldstat.cc
@@ -74,7 +74,7 @@ print_location_LL(int operfunc, const CdoVar &var, int levelID, double sglval, c
 static void
 print_location_LL(int operfunc, const CdoVar &var, int levelID, double sglval, const Field &field, CdiDateTime vDateTime)
 {
-  auto func = [&](auto &v) { print_location_LL(operfunc, var, levelID, sglval, v, vDateTime); };
+  auto func = [&](const auto &v) { print_location_LL(operfunc, var, levelID, sglval, v, vDateTime); };
   field_operation(func, field);
 }
 
@@ -101,7 +101,7 @@ field_mul_weights(Varray<T> &v1, const Varray<double> &v2, size_t numMissVals, d
 static void
 field_mul_weights(Field &field)
 {
-  auto func = [&](auto &v, auto &w, auto numMissVals, double missval) { field_mul_weights(v, w, numMissVals, missval); };
+  auto func = [&](auto &v, const auto &w, auto numMissVals, double missval) { field_mul_weights(v, w, numMissVals, missval); };
   field_operation(func, field, field.weightv, field.numMissVals, field.missval);
 }
 
@@ -183,7 +183,7 @@ fldstatGetParameter(bool &useWeights)
 }
 
 static int
-get_gridcell_weights(Field &field, bool useWeights, bool doPrintWarning, int ngrids, std::string &varName)
+get_gridcell_weights(Field &field, bool useWeights, bool doPrintWarning, int ngrids, const std::string &varName)
 {
   auto gridSize = field.size;
   field.weightv.resize(gridSize);
diff --git a/src/Gridsearch.cc b/src/Gridsearch.cc
index c642f2030..048ecac51 100644
--- a/src/Gridsearch.cc
+++ b/src/Gridsearch.cc
@@ -160,8 +160,8 @@ cellsearch_delete(cellsearch_type *cellsearch)
 static long
 search_cells(cellsearch_type *cellsearch, long tgtCellIndex, long *srchIndices)
 {
-  grid_type *srcGrid = cellsearch->srcGrid;
-  grid_type *tgtGrid = cellsearch->tgtGrid;
+  const grid_type *srcGrid = cellsearch->srcGrid;
+  const grid_type *tgtGrid = cellsearch->tgtGrid;
   const auto &src_cell_bound_box = cellsearch->src_cell_bound_box;
 
   float tgt_cell_bound_box[4];
@@ -222,7 +222,7 @@ public:
   using Process::Process;
   inline static CdoModule module = {
     .name = "Gridsearch",
-    .operators = { { "testpointsearch"}, { "testcellsearch"} },
+    .operators = { { "testpointsearch" }, { "testcellsearch" } },
     .aliases = {},
     .mode = EXPOSED,     // Module mode: 0:intern 1:extern
     .number = CDI_REAL,  // Allowed number type
diff --git a/src/Healpix.cc b/src/Healpix.cc
index 2eb5c2061..9604b26c2 100644
--- a/src/Healpix.cc
+++ b/src/Healpix.cc
@@ -110,7 +110,7 @@ static void
 hp_degrade(const Field &field1, Field &field2, const HealpixParams &params)
 {
   auto hasMissvals = (field1.numMissVals > 0);
-  auto func = [&](auto &v1, auto &v2, auto size, double mv) { degrade(v1, size, v2, hasMissvals, mv, params); };
+  auto func = [&](const auto &v1, auto &v2, auto size, double mv) { degrade(v1, size, v2, hasMissvals, mv, params); };
   field_operation2(func, field1, field2, field2.gridsize, field1.missval);
   if (hasMissvals) field_num_mv(field2);
 }
@@ -138,7 +138,7 @@ static void
 hp_upgrade(const Field &field1, Field &field2, const HealpixParams &params)
 {
   auto hasMissvals = (field1.numMissVals > 0);
-  auto func = [&](auto &v1, auto &v2, auto size, double mv) { upgrade(size, v1, v2, hasMissvals, mv, params); };
+  auto func = [&](const auto &v1, auto &v2, auto size, double mv) { upgrade(size, v1, v2, hasMissvals, mv, params); };
   field_operation2(func, field1, field2, field1.gridsize, field1.missval);
   if (hasMissvals) field_num_mv(field2);
 }
diff --git a/src/Importbinary.cc b/src/Importbinary.cc
index 00b7e0119..ea78fdaf3 100644
--- a/src/Importbinary.cc
+++ b/src/Importbinary.cc
@@ -123,6 +123,7 @@ public:
     .constraints = { 1, 1, NoRestriction },
   };
   inline static RegisterEntry<Importbinary> registration = RegisterEntry<Importbinary>(module);
+
   size_t numMissVals = 0;
   int told, fnum;
   int tmin = 0, tmax = 0;
@@ -155,7 +156,6 @@ public:
   void
   init() override
   {
-
     operator_check_argc(0);
 
     dsets_init(&pfi);
@@ -487,6 +487,7 @@ public:
 
       }  // end of while (1) loop
   }
+
   void
   close() override
   {
diff --git a/src/Importcmsaf.cc b/src/Importcmsaf.cc
index c4ff23627..7c141d56f 100644
--- a/src/Importcmsaf.cc
+++ b/src/Importcmsaf.cc
@@ -145,8 +145,6 @@ defLonLatGrid(int nx, int ny, double c0, double lts, double re)
   int nrx, nry;
   double c;
   double r0, s0;
-  double r, s;
-  double xla, phi;
 
   get_grid_info(c0, re, &nrx, &nry, &r0, &s0, &c);
 
@@ -161,8 +159,8 @@ defLonLatGrid(int nx, int ny, double c0, double lts, double re)
 
   for (int i = 0; i < nx; ++i)
     {
-      r = i + 1;
-      xla = det_lon_atovs(r, r0, lts, c, re);
+      double r = i + 1;
+      auto xla = det_lon_atovs(r, r0, lts, c, re);
       xvals[i] = xla;
       xla = det_lon_atovs(r - 0.5, r0, lts, c, re);
       xbounds[2 * i] = xla;
@@ -173,8 +171,8 @@ defLonLatGrid(int nx, int ny, double c0, double lts, double re)
 
   for (int i = 0; i < ny; ++i)
     {
-      s = (nry - i - 1) + 1;
-      phi = det_lat_atovs(s, s0, lts, c, re);
+      double s = (nry - i - 1) + 1;
+      auto phi = det_lat_atovs(s, s0, lts, c, re);
       yvals[i] = phi;
       phi = det_lat_atovs(s - 0.5, s0, lts, c, re);
       ybounds[2 * i] = phi;
@@ -627,8 +625,6 @@ read_region(hid_t loc_id, int nx, int ny)
   double xmax = region.area_extent[2];
   double ymax = region.area_extent[3];
 
-  double dx = (xmax - xmin) / nx;
-  double dy = (ymax - ymin) / ny;
   /*
   xsize = (int) std::lround((region.xmax-region.xmin)/region.dx);
   ysize = (int) std::lround((region.ymax-region.ymin)/region.dy);
@@ -638,6 +634,8 @@ read_region(hid_t loc_id, int nx, int ny)
 
   if (nfound == 4 && nx == region.xsize && ny == region.ysize && cdo_cmpstr(proj, "laea"))
     {
+      double dx = (xmax - xmin) / nx;
+      double dy = (ymax - ymin) / ny;
       gridID = defLaeaGrid(nx, ny, xmin, ymax, dx, dy, a, lon0, lat0);
     }
 
diff --git a/src/Info.cc b/src/Info.cc
index 99badeb27..ae99bb969 100644
--- a/src/Info.cc
+++ b/src/Info.cc
@@ -42,7 +42,7 @@ static void
 field_min_max_sum(const Field &field, double &min, double &max, double &sum)
 {
   auto mms = MinMaxSum(min, max, sum);
-  auto func = [&](auto &v, auto n) { return varray_min_max_sum(v, n, mms); };
+  auto func = [&](const auto &v, auto n) { return varray_min_max_sum(v, n, mms); };
   mms = field_operation(func, field, field.size);
 
   min = mms.min;
@@ -54,7 +54,7 @@ static size_t
 field_min_max_sum_mv(const Field &field, double &min, double &max, double &sum)
 {
   auto mms = MinMaxSum(min, max, sum);
-  auto func = [&](auto &v, auto n, double mv) { return varray_min_max_sum_mv(v, n, mms, mv); };
+  auto func = [&](const auto &v, auto n, double mv) { return varray_min_max_sum_mv(v, n, mms, mv); };
   mms = field_operation(func, field, field.size, field.missval);
 
   min = mms.min;
@@ -220,7 +220,7 @@ print_map(int nlon, int nlat, const Varray<T> &varray, double mv, double min, do
 static void
 print_map(int nlon, int nlat, const Field &field, const InfoStat &infoStat)
 {
-  auto func = [&](auto &v, double mv) { print_map(nlon, nlat, v, mv, infoStat.min, infoStat.max); };
+  auto func = [&](const auto &v, double mv) { print_map(nlon, nlat, v, mv, infoStat.min, infoStat.max); };
   field_operation(func, field, field.missval);
 }
 
@@ -246,7 +246,7 @@ complex_sum(const Varray<T> &v, double mv, size_t gridsize, double &sum, double
 static size_t
 field_complex_sum(const Field &field, double &sum, double &sumi)
 {
-  auto func = [&](auto &v, double mv, size_t gridsize) { return complex_sum(v, mv, gridsize, sum, sumi); };
+  auto func = [&](const auto &v, double mv, size_t gridsize) { return complex_sum(v, mv, gridsize, sum, sumi); };
   return field_operation(func, field, field.missval, field.gridsize);
 }
 
@@ -454,8 +454,6 @@ public:
   bool printMap;
   bool lvinfo;
 
-  std::string e;  // parameter_name
-
 public:
   void
   init() override
diff --git a/src/Input.cc b/src/Input.cc
index c06c96143..9cbd160f1 100644
--- a/src/Input.cc
+++ b/src/Input.cc
@@ -195,10 +195,10 @@ public:
         outputFiletype = CdoDefault::FileType;
         if (outputFiletype == CDI_UNDEFID) outputFiletype = CDI_FILETYPE_EXT;
       }
-    else if (operatorID == INPUTEXT)
+    else if (operatorID == INPUTSRV)
       {
         outputFiletype = CdoDefault::FileType;
-        if (outputFiletype == CDI_UNDEFID) outputFiletype = CDI_FILETYPE_EXT;
+        if (outputFiletype == CDI_UNDEFID) outputFiletype = CDI_FILETYPE_SRV;
       }
   }
 
diff --git a/src/Intgrid.cc b/src/Intgrid.cc
index 795c1232b..2a3cc6eec 100644
--- a/src/Intgrid.cc
+++ b/src/Intgrid.cc
@@ -50,7 +50,7 @@ thinout(const Varray<T1> &varray1, Varray<T2> &varray2, int gridID1, int gridID2
 static void
 thinout(const Field &field1, Field &field2, size_t xinc, size_t yinc)
 {
-  auto func = [&](auto &v1, auto &v2, auto grid1, auto grid2) { thinout(v1, v2, grid1, grid2, xinc, yinc); };
+  auto func = [&](const auto &v1, auto &v2, auto grid1, auto grid2) { thinout(v1, v2, grid1, grid2, xinc, yinc); };
   field_operation2(func, field1, field2, field1.grid, field2.grid);
   field_num_mv(field2);
 }
@@ -132,43 +132,48 @@ gen_boxavg_grid(int gridID1, size_t xinc, size_t yinc)
       gridInqXvals(gridID1, &xvals1[0]);
       gridInqYvals(gridID1, &yvals1[0]);
 
-      Varray<double> grid1_corner_lon, grid1_corner_lat;
+      for (size_t i = 0, j = 0; i < nlon1; i += xinc)
+        {
+          auto i1 = i + (xinc - 1);
+          if (i1 >= nlon1 - 1) i1 = nlon1 - 1;
+          xvals2[j] = xvals1[i] + (xvals1[i1] - xvals1[i]) / 2;
+          j++;
+        }
+      for (size_t i = 0, j = 0; i < nlat1; i += yinc)
+        {
+          auto i1 = i + (yinc - 1);
+          if (i1 >= nlat1 - 1) i1 = nlat1 - 1;
+          yvals2[j] = yvals1[i] + (yvals1[i1] - yvals1[i]) / 2;
+          j++;
+        }
+
       Varray<double> grid2_corner_lon, grid2_corner_lat;
       if (gridHasBounds(gridID1))
         {
+          Varray<double> grid1_corner_lon, grid1_corner_lat;
           grid1_corner_lon.resize(2 * nlon1);
           grid1_corner_lat.resize(2 * nlat1);
           grid2_corner_lon.resize(2 * nlon2);
           grid2_corner_lat.resize(2 * nlat2);
           gridInqXbounds(gridID1, &grid1_corner_lon[0]);
           gridInqYbounds(gridID1, &grid1_corner_lat[0]);
-        }
 
-      size_t j = 0;
-      for (size_t i = 0; i < nlon1; i += xinc)
-        {
-          auto i1 = i + (xinc - 1);
-          if (i1 >= nlon1 - 1) i1 = nlon1 - 1;
-          xvals2[j] = xvals1[i] + (xvals1[i1] - xvals1[i]) / 2;
-          if (!grid2_corner_lon.empty())
+          for (size_t i = 0, j = 0; i < nlon1; i += xinc)
             {
+              auto i1 = i + (xinc - 1);
+              if (i1 >= nlon1 - 1) i1 = nlon1 - 1;
               grid2_corner_lon[2 * j] = grid1_corner_lon[2 * i];
               grid2_corner_lon[2 * j + 1] = grid1_corner_lon[2 * i1 + 1];
+              j++;
             }
-          j++;
-        }
-      j = 0;
-      for (size_t i = 0; i < nlat1; i += yinc)
-        {
-          auto i1 = i + (yinc - 1);
-          if (i1 >= nlat1 - 1) i1 = nlat1 - 1;
-          yvals2[j] = yvals1[i] + (yvals1[i1] - yvals1[i]) / 2;
-          if (!grid2_corner_lat.empty())
+          for (size_t i = 0, j = 0; i < nlat1; i += yinc)
             {
+              auto i1 = i + (yinc - 1);
+              if (i1 >= nlat1 - 1) i1 = nlat1 - 1;
               grid2_corner_lat[2 * j] = grid1_corner_lat[2 * i];
               grid2_corner_lat[2 * j + 1] = grid1_corner_lat[2 * i1 + 1];
+              j++;
             }
-          j++;
         }
 
       gridDefXvals(gridID2, &xvals2[0]);
@@ -225,7 +230,7 @@ boxavg(const Varray<T1> &varray1, Varray<T2> &varray2, int gridID1, int gridID2,
 static void
 boxavg(const Field &field1, Field &field2, size_t xinc, size_t yinc)
 {
-  auto func = [&](auto &v1, auto &v2, auto grid1, auto grid2) { boxavg(v1, v2, grid1, grid2, xinc, yinc); };
+  auto func = [&](const auto &v1, auto &v2, auto grid1, auto grid2) { boxavg(v1, v2, grid1, grid2, xinc, yinc); };
   field_operation2(func, field1, field2, field1.grid, field2.grid);
   field_num_mv(field2);
 }
diff --git a/src/Intlevel.cc b/src/Intlevel.cc
index 7d703c5ba..d4de43495 100644
--- a/src/Intlevel.cc
+++ b/src/Intlevel.cc
@@ -150,7 +150,7 @@ vert_gen_weights(int extrapolate, int nlev1, const Varray<double> &lev1, int nle
   for (int i2 = 0; i2 < nlev2; ++i2)
     {
       int idx1 = 0, idx2 = 0;
-      double val1, val2 = 0.0;
+      double val2 = 0.0;
 
       // Because 2 levels were added to the source vertical coordinate (one on top, one at the bottom), its loop starts at 1
       int i1;
@@ -159,7 +159,7 @@ vert_gen_weights(int extrapolate, int nlev1, const Varray<double> &lev1, int nle
           auto lev1_isUp = (lev1[i1 - 1] < lev1[i1]);
           idx1 = lev1_isUp ? i1 - 1 : i1;
           idx2 = lev1_isUp ? i1 : i1 - 1;
-          val1 = lev1[idx1];
+          auto val1 = lev1[idx1];
           val2 = lev1[idx2];
           if (lev2[i2] > val1 && lev2[i2] <= val2) break;
         }
@@ -486,7 +486,6 @@ public:
     if (std::isdigit((int) pargv[0][0])) { params.levels = cdo_argv_to_fltarr(pargv); }
     else
       {
-        std::string zdescription;
         params = get_parameter();
         if (!params.zdescription.empty())
           {
@@ -623,7 +622,8 @@ public:
                 for (int levelID = 0; levelID < nlev2; ++levelID)
                   {
                     auto offset = gridsize * levelID;
-                    auto func = [&](auto &v) { varnumMissVals[varID][levelID] = array_num_mv(gridsize, &v[offset], missval); };
+                    auto func
+                        = [&](const auto &v) { varnumMissVals[varID][levelID] = array_num_mv(gridsize, &v[offset], missval); };
                     field_operation(func, vardata2[varID]);
                   }
               }
diff --git a/src/Intlevel3d.cc b/src/Intlevel3d.cc
index 2bc768afc..602d913ff 100644
--- a/src/Intlevel3d.cc
+++ b/src/Intlevel3d.cc
@@ -351,8 +351,7 @@ public:
         // Read the whole 3d data field
         for (int recID = 0; recID < nrecs; ++recID)
           {
-            int varID, levelID;
-            cdo_inq_record(streamID1, &varID, &levelID);
+            auto [varID, levelID] = cdo_inq_record(streamID1);
             cdo_read_record(streamID1, vardata1[varID], levelID, &varnumMissVals[varID][levelID]);
             processVars[varID] = true;
           }
@@ -371,7 +370,8 @@ public:
                 for (int levelID = 0; levelID < nlevo; ++levelID)
                   {
                     auto offset = gridsize * levelID;
-                    auto func = [&](auto &v) { varnumMissVals[varID][levelID] = array_num_mv(gridsize, &v[offset], missval); };
+                    auto func
+                        = [&](const auto &v) { varnumMissVals[varID][levelID] = array_num_mv(gridsize, &v[offset], missval); };
                     field_operation(func, vardata2[varID]);
                   }
               }
diff --git a/src/Merge.cc b/src/Merge.cc
index 525819192..c17463924 100644
--- a/src/Merge.cc
+++ b/src/Merge.cc
@@ -308,7 +308,7 @@ public:
   void
   close() override
   {
-    for (auto &streamID : streamIDs) cdo_stream_close(streamID);
+    for (const auto &streamID : streamIDs) cdo_stream_close(streamID);
 
     cdo_stream_close(streamID2);
 
diff --git a/src/Mergetime.cc b/src/Mergetime.cc
index f391cca66..f051bf0ab 100644
--- a/src/Mergetime.cc
+++ b/src/Mergetime.cc
@@ -204,7 +204,7 @@ public:
   }
 
   void
-  fill_missing_fields(StreamInfo &si1, StreamInfo &si2)
+  fill_missing_fields(const StreamInfo &si1, StreamInfo &si2)
   {
     auto maxVars = si1.varList.numVars();
     auto numVars = si2.varList.numVars();
diff --git a/src/Ninfo.cc b/src/Ninfo.cc
index 2bcbd403c..078e5e555 100644
--- a/src/Ninfo.cc
+++ b/src/Ninfo.cc
@@ -68,7 +68,6 @@ public:
   void
   init() override
   {
-
     auto operatorID = cdo_operator_id();
     operfunc = cdo_operator_f1(operatorID);
 
@@ -92,42 +91,45 @@ public:
       {
       case NYEAR:
         {
-          int year0 = 0;
           int nyear = 0;
-          int tsID = 0;
           if (ntsteps != 0)
-            while (cdo_stream_inq_timestep(streamID, tsID))
-              {
-                int year = taxisInqVdatetime(taxisID).date.year;
-
-                if (tsID == 0 || year0 != year)
-                  {
-                    year0 = year;
-                    nyear++;
-                  }
-
-                tsID++;
-              }
+            {
+              int year0 = 0;
+              int tsID = 0;
+              while (cdo_stream_inq_timestep(streamID, tsID))
+                {
+                  int year = taxisInqVdatetime(taxisID).date.year;
+                  if (tsID == 0 || year0 != year)
+                    {
+                      year0 = year;
+                      nyear++;
+                    }
+
+                  tsID++;
+                }
+            }
           fprintf(stdout, "%d\n", nyear);
           break;
         }
       case NMON:
         {
-          int month0 = 0;
           int nmonth = 0;
-          int tsID = 0;
           if (ntsteps != 0)
-            while (cdo_stream_inq_timestep(streamID, tsID))
-              {
-                int month = taxisInqVdatetime(taxisID).date.month;
-                if (tsID == 0 || month0 != month)
-                  {
-                    month0 = month;
-                    nmonth++;
-                  }
-
-                tsID++;
-              }
+            {
+              int month0 = 0;
+              int tsID = 0;
+              while (cdo_stream_inq_timestep(streamID, tsID))
+                {
+                  int month = taxisInqVdatetime(taxisID).date.month;
+                  if (tsID == 0 || month0 != month)
+                    {
+                      month0 = month;
+                      nmonth++;
+                    }
+
+                  tsID++;
+                }
+            }
           fprintf(stdout, "%d\n", nmonth);
           break;
         }
@@ -135,19 +137,21 @@ public:
         {
           CdiDate date0{};
           int ndate = 0;
-          int tsID = 0;
           if (ntsteps != 0)
-            while (cdo_stream_inq_timestep(streamID, tsID))
-              {
-                auto vDate = taxisInqVdatetime(taxisID).date;
-                if (tsID == 0 || !cdiDate_isEQ(date0, vDate))
-                  {
-                    date0 = vDate;
-                    ndate++;
-                  }
-
-                tsID++;
-              }
+            {
+              int tsID = 0;
+              while (cdo_stream_inq_timestep(streamID, tsID))
+                {
+                  auto vDate = taxisInqVdatetime(taxisID).date;
+                  if (tsID == 0 || !cdiDate_isEQ(date0, vDate))
+                    {
+                      date0 = vDate;
+                      ndate++;
+                    }
+
+                  tsID++;
+                }
+            }
           fprintf(stdout, "%d\n", ndate);
           break;
         }
diff --git a/src/Outputgmt.cc b/src/Outputgmt.cc
index a54543095..3e9238629 100644
--- a/src/Outputgmt.cc
+++ b/src/Outputgmt.cc
@@ -67,7 +67,7 @@ check_lonbounds(int ncorner, double *lon_bounds)
 }
 
 static void
-make_cyclic(double *array1, double *array2, long nlon, long nlat)
+make_cyclic(const double *array1, double *array2, long nlon, long nlat)
 {
   for (long j = 0; j < nlat; ++j)
     for (long i = 0; i < nlon; ++i)
@@ -91,8 +91,8 @@ output_zon(double levmin, double levmax, const double *cell_corner_lat)
   auto latmax = cell_corner_lat[0];
   for (int ic = 1; ic < 4; ++ic) latmin = std::min(latmin, cell_corner_lat[ic]);
   for (int ic = 1; ic < 4; ++ic) latmax = std::max(latmax, cell_corner_lat[ic]);
-  double xlev[4] = { levmin, levmax, levmax, levmin };
-  double xlat[4] = { latmin, latmin, latmax, latmax };
+  const double xlev[4] = { levmin, levmax, levmax, levmin };
+  const double xlat[4] = { latmin, latmin, latmax, latmax };
   for (int ic = 0; ic < 4; ++ic) fprintf(stdout, "   %g  %g\n", xlat[ic], xlev[ic]);
   fprintf(stdout, "   %g  %g\n", xlat[0], xlev[0]);
 }
@@ -104,8 +104,8 @@ output_mer(double levmin, double levmax, const double *cell_corner_lon)
   auto lonmax = cell_corner_lon[0];
   for (int ic = 1; ic < 4; ++ic) lonmin = std::min(lonmin, cell_corner_lon[ic]);
   for (int ic = 1; ic < 4; ++ic) lonmax = std::max(lonmax, cell_corner_lon[ic]);
-  double xlev[4] = { levmin, levmin, levmax, levmax };
-  double xlon[4] = { lonmin, lonmax, lonmax, lonmin };
+  const double xlev[4] = { levmin, levmin, levmax, levmax };
+  const double xlon[4] = { lonmin, lonmax, lonmax, lonmin };
   for (int ic = 0; ic < 4; ++ic) fprintf(stdout, "   %g  %g\n", xlon[ic], xlev[ic]);
   fprintf(stdout, "   %g  %g\n", xlon[0], xlev[0]);
 }
@@ -272,7 +272,7 @@ output_kml(size_t ngp, const Varray<double> &array, int ncorner, const Varray<do
       if (grid_mask.size() && grid_mask[i] == 0) continue;
 
       auto lonBounds = &grid_corner_lon[i * ncorner];
-      auto latBounds = &grid_corner_lat[i * ncorner];
+      const auto latBounds = &grid_corner_lat[i * ncorner];
       auto ncornerNew = check_ncorner(ncorner, lonBounds, latBounds);
       check_lonbounds(ncornerNew, lonBounds);
 
@@ -717,8 +717,7 @@ public:
                 for (long j = 0; j < nlat - 1; ++j)
                   for (long i = 0; i < mlon; ++i)
                     {
-                      int ip1 = i + 1;
-                      if (i == nlon - 1) ip1 = 0;
+                      int ip1 = (i == nlon - 1) ? 0 : i + 1;
                       int c1 = (j) *nlon + ip1;
                       int c2 = (j) *nlon + i;
                       int c3 = (j + 1) * nlon + i;
diff --git a/src/Pack.cc b/src/Pack.cc
index e05f28482..9e9ec2bda 100644
--- a/src/Pack.cc
+++ b/src/Pack.cc
@@ -273,7 +273,7 @@ private:
               {
                 if (t > 0 && var.isConstant) continue;
 
-                auto &field = varsData[t][varID][levelID];
+                const auto &field = varsData[t][varID][levelID];
                 auto numMissVals = field.numMissVals;
 
                 if (numMissVals) numMissValspv += numMissVals;
@@ -362,7 +362,7 @@ private:
       {
         const auto &var = varList1.vars[varID];
 
-        for (auto &packEntry : packList)
+        for (const auto &packEntry : packList)
           {
             if (var.name == packEntry.name)
               {
diff --git a/src/Remapeta.cc b/src/Remapeta.cc
index 2a8f89183..0e4348e44 100644
--- a/src/Remapeta.cc
+++ b/src/Remapeta.cc
@@ -159,7 +159,7 @@ template <typename T>
 void
 field_copy_array(size_t len, const Field &field, T *array)
 {
-  auto func = [&](auto &v) {
+  auto func = [&](const auto &v) {
     for (size_t i = 0; i < len; ++i) array[i] = v[i];
   };
   field_operation(func, field);
@@ -399,7 +399,7 @@ public:
 
     operator_input_arg(cdo_operator_enter(operatorID));
 
-    auto envstr = getenv("REMAPETA_PTOP");
+    const auto envstr = getenv("REMAPETA_PTOP");
     if (envstr)
       {
         auto fval = atof(envstr);
diff --git a/src/Remapgrid.cc b/src/Remapgrid.cc
index 36ad8b53c..7783dc5a3 100644
--- a/src/Remapgrid.cc
+++ b/src/Remapgrid.cc
@@ -154,7 +154,7 @@ remap_normalize_field(NormOpt normOpt, Field &field, const RemapGrid &tgtGrid)
 
 template <typename T>
 static void
-remap_set_fracmin(double fracMin, size_t gridsize, Varray<T> &array, double mv, RemapGrid *tgtGrid)
+remap_set_fracmin(double fracMin, size_t gridsize, Varray<T> &array, double mv, const RemapGrid *tgtGrid)
 {
   if (fracMin > 0.0)
     {
@@ -165,7 +165,7 @@ remap_set_fracmin(double fracMin, size_t gridsize, Varray<T> &array, double mv,
 }
 
 static void
-remap_set_fracmin(double fracMin, Field &field, RemapGrid *tgtGrid)
+remap_set_fracmin(double fracMin, Field &field, const RemapGrid *tgtGrid)
 {
   auto func = [&](auto &v) { remap_set_fracmin(fracMin, field.gridsize, v, field.missval, tgtGrid); };
   field_operation(func, field);
diff --git a/src/Remapstat.cc b/src/Remapstat.cc
index be7ed0718..c9d4be305 100644
--- a/src/Remapstat.cc
+++ b/src/Remapstat.cc
@@ -254,7 +254,8 @@ find_points_yac(std::vector<char> &vmask, size_t cell_no, size_t ncorner, size_t
   cell.edge_type = new enum yac_edge_type[ncorner];
   cell.coordinates_xyz = new double[ncorner][3];
 
-  // enum yac_edge_type lonlat_circle_type[] = { YAC_LON_CIRCLE_EDGE, YAC_LAT_CIRCLE_EDGE, YAC_LON_CIRCLE_EDGE, YAC_LAT_CIRCLE_EDGE, YAC_LON_CIRCLE_EDGE
+  // enum yac_edge_type lonlat_circle_type[] = { YAC_LON_CIRCLE_EDGE, YAC_LAT_CIRCLE_EDGE, YAC_LON_CIRCLE_EDGE, YAC_LAT_CIRCLE_EDGE,
+  // YAC_LON_CIRCLE_EDGE
   // };
 
   for (size_t k = 0; k < ncorner; ++k)
@@ -379,19 +380,21 @@ find_points_rec2d(std::vector<char> &vmask, size_t i, size_t nlon2, size_t numIn
   for (size_t k = 0; k < numIndices; ++k)
     {
       auto index1 = indices[k];
-      auto x = xvals1[index1];
       auto y = yvals1[index1];
       if (y >= ybounds2d[2 * iy] && y < ybounds2d[2 * iy + 1])
-        if ((x >= xbounds2d[2 * ix] && x < xbounds2d[2 * ix + 1])
-            || ((x - PI2) >= xbounds2d[2 * ix] && (x - PI2) < xbounds2d[2 * ix + 1]))
-          {
-            if (vmask[index1] == 0)
-              {
-                indices[nvalues] = index1;
-                nvalues++;
-              }
-            if (vmask[index1] < 127) vmask[index1]++;
-          }
+        {
+          auto x = xvals1[index1];
+          if ((x >= xbounds2d[2 * ix] && x < xbounds2d[2 * ix + 1])
+              || ((x - PI2) >= xbounds2d[2 * ix] && (x - PI2) < xbounds2d[2 * ix + 1]))
+            {
+              if (vmask[index1] == 0)
+                {
+                  indices[nvalues] = index1;
+                  nvalues++;
+                }
+              if (vmask[index1] < 127) vmask[index1]++;
+            }
+        }
     }
 
   return nvalues;
diff --git a/src/Runstat.cc b/src/Runstat.cc
index 42bed34b7..0dc069d6d 100644
--- a/src/Runstat.cc
+++ b/src/Runstat.cc
@@ -71,7 +71,7 @@ public:
   void
   init() override
   {
-    auto envstr = getenv("RUNSTAT_NOMISS");
+    const auto envstr = getenv("RUNSTAT_NOMISS");
     if (envstr)
       {
         char *endptr;
diff --git a/src/Selbox.cc b/src/Selbox.cc
index d98a138e2..581d30018 100644
--- a/src/Selbox.cc
+++ b/src/Selbox.cc
@@ -921,7 +921,7 @@ window_box(int nwpv, const T1 *array1, int gridID, T2 *array2, long lat1, long l
 static void
 window_box(const Field &field1, Field &field2, long lat1, long lat2, long lon11, long lon12, long lon21, long lon22)
 {
-  auto func = [&](auto &v1, auto &v2) {
+  auto func = [&](const auto &v1, auto &v2) {
     window_box(field1.nwpv, v1.data(), field1.grid, v2.data(), lat1, lat2, lon11, lon12, lon21, lon22);
   };
   field_operation2(func, field1, field2);
diff --git a/src/Selgridcell.cc b/src/Selgridcell.cc
index 1b8ff405e..e54265975 100644
--- a/src/Selgridcell.cc
+++ b/src/Selgridcell.cc
@@ -77,7 +77,7 @@ genindexgrid(int gridID1, size_t gridsize2, const std::vector<long> &cellidx)
 static void
 select_index(const Field &field1, Field &field2, long nind, const std::vector<long> &cellIndex)
 {
-  auto func = [&](auto &v1, auto &v2) {
+  auto func = [&](const auto &v1, auto &v2) {
     for (long i = 0; i < nind; ++i) v2[i] = v1[cellIndex[i]];
   };
   field_operation2(func, field1, field2);
diff --git a/src/Selregion.cc b/src/Selregion.cc
index b432ee0c6..cf1bc848c 100644
--- a/src/Selregion.cc
+++ b/src/Selregion.cc
@@ -130,8 +130,8 @@ generate_region_grid(int gridID1, long &gridsize2, std::vector<long> &cellidx, i
           auto segmentSize = regions.segmentSize[k];
           if (segmentSize < 3) continue;
           auto offset = regions.segmentOffset[k];
-          auto xcoords = &regions.x[offset];
-          auto ycoords = &regions.y[offset];
+          const auto xcoords = &regions.x[offset];
+          const auto ycoords = &regions.y[offset];
           sel_region_cell(mask, gridsize, xvals, yvals, xcoords, ycoords, segmentSize, cellidx);
         }
     }
diff --git a/src/Setfilter.cc b/src/Setfilter.cc
index ffd0772b6..0a3edf1c2 100644
--- a/src/Setfilter.cc
+++ b/src/Setfilter.cc
@@ -200,8 +200,11 @@ public:
 
         for (int recID = 0; recID < nrecs; ++recID)
           {
-            auto fstatus = (tsID + (recID + 1.0) / nrecs) / numSteps;
-            if (numSteps > 0) progress.update(fstatus);
+            if (numSteps > 0)
+              {
+                auto fstatus = (tsID + (recID + 1.0) / nrecs) / numSteps;
+                progress.update(fstatus);
+              }
 
             auto [varID, levelID] = cdo_inq_record(streamID1);
             cdo_def_record(streamID2, varID, levelID);
diff --git a/src/Setgrid.cc b/src/Setgrid.cc
index afab77d5c..865a34587 100644
--- a/src/Setgrid.cc
+++ b/src/Setgrid.cc
@@ -158,7 +158,7 @@ grid_set_cellarea(int vlistID1, int vlistID2, Varray<double> &gridcellArea)
 }
 
 static void
-grid_set_mask(int vlistID1, int vlistID2, Varray<double> &gridmask)
+grid_set_mask(int vlistID1, int vlistID2, const Varray<double> &gridmask)
 {
   auto masksize = gridmask.size();
   auto ngrids = vlistNumGrids(vlistID1);
diff --git a/src/Smooth.cc b/src/Smooth.cc
index 02b3e347b..0341bbd9a 100644
--- a/src/Smooth.cc
+++ b/src/Smooth.cc
@@ -132,7 +132,7 @@ smooth(int gridID, double mv, const Varray<T1> &array1, Varray<T2> &array2, cons
 static void
 smooth(const Field &field1, Field &field2, const SmoothPoint &spoint)
 {
-  auto func = [&](auto &v1, auto &v2) { field2.numMissVals = smooth(field1.grid, field1.missval, v1, v2, spoint); };
+  auto func = [&](const auto &v1, auto &v2) { field2.numMissVals = smooth(field1.grid, field1.missval, v1, v2, spoint); };
   field_operation2(func, field1, field2);
 }
 
@@ -248,7 +248,7 @@ smooth9(int gridID, double mv, const Varray<T1> &array1, Varray<T2> &array2)
 static void
 smooth9(const Field &field1, Field &field2)
 {
-  auto func = [&](auto &v1, auto &v2) { field2.numMissVals = smooth9(field1.grid, field1.missval, v1, v2); };
+  auto func = [&](const auto &v1, auto &v2) { field2.numMissVals = smooth9(field1.grid, field1.missval, v1, v2); };
   field_operation2(func, field1, field2);
 }
 
diff --git a/src/Split.cc b/src/Split.cc
index 6eee7369b..8d3f14189 100644
--- a/src/Split.cc
+++ b/src/Split.cc
@@ -36,7 +36,7 @@ gen_filename(std::string &fileName, bool swapObase, const std::string &obase, co
 }
 
 static int
-split_code(bool swapObase, const std::string &fileSuffix, std::string &fileName, int vlistID1, const VarList &varList,
+split_code(bool swapObase, const std::string &fileSuffix, const std::string &fileName, int vlistID1, const VarList &varList,
            std::vector<CdoStreamID> &streamIDs, std::vector<int> &vlistIDs)
 {
   auto numVars = varList.numVars();
@@ -87,7 +87,7 @@ split_code(bool swapObase, const std::string &fileSuffix, std::string &fileName,
 }
 
 static int
-split_param(bool swapObase, const std::string &fileSuffix, std::string &fileName, int vlistID1, const VarList &varList,
+split_param(bool swapObase, const std::string &fileSuffix, const std::string &fileName, int vlistID1, const VarList &varList,
             std::vector<CdoStreamID> &streamIDs, std::vector<int> &vlistIDs)
 {
   char paramstr[32];
@@ -140,7 +140,7 @@ split_param(bool swapObase, const std::string &fileSuffix, std::string &fileName
 }
 
 static int
-split_name(bool swapObase, const std::string &fileSuffix, std::string &fileName, int vlistID1, const VarList &varList,
+split_name(bool swapObase, const std::string &fileSuffix, const std::string &fileName, int vlistID1, const VarList &varList,
            std::vector<CdoStreamID> &streamIDs, std::vector<int> &vlistIDs)
 {
   auto numVars = varList.numVars();
@@ -174,7 +174,7 @@ split_name(bool swapObase, const std::string &fileSuffix, std::string &fileName,
 }
 
 static int
-split_level(bool swapObase, const std::string &fileSuffix, std::string &fileName, int vlistID1, const VarList &varList,
+split_level(bool swapObase, const std::string &fileSuffix, const std::string &fileName, int vlistID1, const VarList &varList,
             std::vector<CdoStreamID> &streamIDs, std::vector<int> &vlistIDs)
 {
   auto numVars = varList.numVars();
@@ -232,7 +232,7 @@ split_level(bool swapObase, const std::string &fileSuffix, std::string &fileName
 }
 
 static int
-split_grid(bool swapObase, const std::string &fileSuffix, std::string &fileName, int vlistID1, const VarList &varList,
+split_grid(bool swapObase, const std::string &fileSuffix, const std::string &fileName, int vlistID1, const VarList &varList,
            std::vector<CdoStreamID> &streamIDs, std::vector<int> &vlistIDs)
 {
   auto nsplit = vlistNumGrids(vlistID1);
@@ -273,7 +273,7 @@ split_grid(bool swapObase, const std::string &fileSuffix, std::string &fileName,
 }
 
 static int
-split_zaxis(bool swapObase, const std::string &fileSuffix, std::string &fileName, int vlistID1, const VarList &varList,
+split_zaxis(bool swapObase, const std::string &fileSuffix, const std::string &fileName, int vlistID1, const VarList &varList,
             std::vector<CdoStreamID> &streamIDs, std::vector<int> &vlistIDs)
 {
   auto nsplit = vlistNumZaxis(vlistID1);
@@ -314,7 +314,7 @@ split_zaxis(bool swapObase, const std::string &fileSuffix, std::string &fileName
 }
 
 static int
-split_tabnum(bool swapObase, const std::string &fileSuffix, std::string &fileName, int vlistID1, const VarList &varList,
+split_tabnum(bool swapObase, const std::string &fileSuffix, const std::string &fileName, int vlistID1, const VarList &varList,
              std::vector<CdoStreamID> &streamIDs, std::vector<int> &vlistIDs)
 {
   auto numVars = varList.numVars();
@@ -514,7 +514,7 @@ public:
   {
     cdo_stream_close(streamID1);
 
-    for (auto &streamID : streamIDs) cdo_stream_close(streamID);
-    for (auto &id : vlistIDs) vlistDestroy(id);
+    for (const auto &streamID : streamIDs) cdo_stream_close(streamID);
+    for (const auto &id : vlistIDs) vlistDestroy(id);
   }
 };
diff --git a/src/Vargen.cc b/src/Vargen.cc
index e70561f38..352fc6dcc 100644
--- a/src/Vargen.cc
+++ b/src/Vargen.cc
@@ -282,7 +282,7 @@ private:
   double rstart = 0.0, rstop = 0.0, rinc = 0.0;
   double rconst = 0.0;
   std::vector<double> levels;
-  int ntimesteps;
+  int numSteps;
 
   int taxisID;
   CdoStreamID streamID;
@@ -402,7 +402,7 @@ public:
 
     cdo_def_vlist(streamID, vlistID);
 
-    ntimesteps = (operatorID == SEQ) ? 1.001 + ((rstop - rstart) / rinc) : 1;
+    numSteps = (operatorID == SEQ) ? 1.001 + ((rstop - rstart) / rinc) : 1;
     if (operatorID != SEQ) vlistDefNtsteps(vlistID, 0);
   }
 
@@ -416,7 +416,7 @@ public:
     size_t gridsize = gridInqSize(gridID);
     Varray<float> array(gridsize);
 
-    for (int tsID = 0; tsID < ntimesteps; ++tsID)
+    for (int tsID = 0; tsID < numSteps; ++tsID)
       {
         auto rval = rstart + rinc * tsID;
         CdiDateTime vDateTime{};
diff --git a/src/Vertintml.cc b/src/Vertintml.cc
index 5160a6fda..cb717f989 100644
--- a/src/Vertintml.cc
+++ b/src/Vertintml.cc
@@ -48,7 +48,7 @@ field_check_sgeopot(const Varray<T> &sgeopot, const T *gheightAtSurface)
 }
 
 static void
-field_check_sgeopot(MemType memType, size_t gridsize, int nlevels, const Field &field2d, Field3D &field3d)
+field_check_sgeopot(MemType memType, size_t gridsize, int nlevels, const Field &field2d, const Field3D &field3d)
 {
   if (memType == MemType::Float)
     field_check_sgeopot(field2d.vec_f, &field3d.vec_f[gridsize * (nlevels - 1)]);
@@ -119,7 +119,7 @@ zaxis_is_hybrid(int zaxisType)
 }
 
 static void
-change_hybrid_zaxis(int vlistID1, int vlistID2, int vctSize, double *vct, int zaxisID2, int numFullLevels, int numHalfLevels)
+change_hybrid_zaxis(int vlistID1, int vlistID2, int vctSize, const double *vct, int zaxisID2, int numFullLevels, int numHalfLevels)
 {
   auto nzaxis = vlistNumZaxis(vlistID1);
   for (int iz = 0; iz < nzaxis; ++iz)
@@ -296,7 +296,7 @@ pressure_level_interpolation(Varray<double> &pressureLevels, bool useHeightLevel
     {
       if (interpVars[varID])
         {
-          auto &var1 = varList1.vars[varID];
+          const auto &var1 = varList1.vars[varID];
           if (var1.nlevels == numHalfLevels && varID != varIDs.gheightID) needVertIndexHalf = true;
         }
     }
diff --git a/src/cdo_fftw3.cc b/src/cdo_fftw3.cc
index 757756024..bd7af926d 100644
--- a/src/cdo_fftw3.cc
+++ b/src/cdo_fftw3.cc
@@ -42,7 +42,7 @@ fourier2grid(int gridID1, const Varray<double> &array1, Varray<double> &array2)
     {
       auto ompthID = cdo_omp_get_thread_num();
       auto in_fft = ompmem[ompthID].in_fft;
-      auto out_fft = ompmem[ompthID].out_fft;
+      const auto out_fft = ompmem[ompthID].out_fft;
 
       for (size_t ifc = 0; ifc < nlon; ++ifc)
         {
diff --git a/src/cdo_getopt.cc b/src/cdo_getopt.cc
index bcdf0e42c..ffe95020d 100644
--- a/src/cdo_getopt.cc
+++ b/src/cdo_getopt.cc
@@ -164,7 +164,7 @@ CLIOptions::get_env_vars()
       const char *envVarValue = getenv(setting_ptr->name.c_str());
       if (envVarValue)
         {
-          if (!setting_ptr->hasArgument || (setting_ptr->hasArgument && *envVarValue))
+          if (!setting_ptr->hasArgument || *envVarValue)
             {
               Debug(CLIOP_DBG, "Executing envvar %s", setting_ptr->name);
               setting_ptr->argument.value = envVarValue ? std::string(envVarValue) : std::string();
@@ -177,7 +177,7 @@ CLIOptions::get_env_vars()
 void
 CLIOptions::print_registry(const std::vector<std::shared_ptr<cdo_option_2>> &p_registry)
 {
-  for (auto &it : p_registry)
+  for (const auto &it : p_registry)
     {
       if (it->argument.value.size() > 0) fprintf(stderr, "%s = %s\n", it->name.c_str(), it->argument.value.c_str());
     }
@@ -189,7 +189,7 @@ CLIOptions::envvar(const std::string &p_name)
   if (envvarMap.find(p_name) == envvarMap.end())
     {
       envvarRegistry.push_back(std::make_shared<cdo_option_2>());
-      auto &newEnvVar = envvarRegistry.back();
+      const auto &newEnvVar = envvarRegistry.back();
       envvarMap[p_name] = newEnvVar;
       newEnvVar->name = p_name;
     }
@@ -226,7 +226,7 @@ std::string
 CLIOptions::print_envvar_help()
 {
   std::stringstream helpString;
-  for (auto &it : envvarMap)
+  for (const auto &it : envvarMap)
     {
       if (!it.second->isInternal)
         {
@@ -236,7 +236,7 @@ CLIOptions::print_envvar_help()
           if (it.second->hasArgument) helpString << " <" + it.second->argument.description + "> ";
           int spaceLeft = padding - helpString.str().size() + len0;
           if (spaceLeft < 0) spaceLeft = 0;
-          for (auto &line : it.second->description) { helpString << std::string(spaceLeft, ' ') + line + "\n"; }
+          for (const auto &line : it.second->description) { helpString << std::string(spaceLeft, ' ') + line + "\n"; }
         }
     }
   return helpString.str();
@@ -267,7 +267,7 @@ CLIOptions::print_options_help(const std::string &p_category)
               helpString += "\n";
               spaceLeft = padding;
             }
-          for (auto &line : option->description)
+          for (const auto &line : option->description)
             {
               helpString += std::string(spaceLeft, ' ') + line + "\n";
               spaceLeft = padding;
@@ -315,7 +315,7 @@ CLIOptions::option_from_envvar(const std::string &p_envvarName)
 void
 CLIOptions::print_available_options()
 {
-  for (auto &iter : optionMap) { std::cerr << iter.first << std::endl; }
+  for (const auto &iter : optionMap) { std::cerr << iter.first << std::endl; }
   std::cerr << "_---------------------------------_" << std::endl;
   for (auto &iter : optionMap)
     {
diff --git a/src/cdo_stepstat.h b/src/cdo_stepstat.h
index 99d93de3e..5055a8900 100644
--- a/src/cdo_stepstat.h
+++ b/src/cdo_stepstat.h
@@ -37,71 +37,71 @@ public:
   }
 
   void
-  add_field_kernel(const Field &field, Field &samp, Field &var1, Field &var2, int numSets)
+  add_field_kernel(const Field &field, Field &sampData, Field &varData1, Field &varData2, int numSets)
   {
     if (numSets == 0)
       {
         if (lminidx || lmaxidx)
-          field_fill(var1, 0.0);
+          field_fill(varData1, 0.0);
         else
-          field_copy(field, var1);
+          field_copy(field, varData1);
 
-        if (lrange || lminidx || lmaxidx) field_copy(field, var2);
+        if (lrange || lminidx || lmaxidx) field_copy(field, varData2);
 
-        if (lvarstd) field2_moq(var2, var1);
+        if (lvarstd) field2_moq(varData2, varData1);
 
-        if (field.numMissVals || !samp.empty())
+        if (field.numMissVals || !sampData.empty())
           {
-            if (samp.empty()) samp.resize(var1.size);
-            field2_vinit(samp, field);
+            if (sampData.empty()) sampData.resize(varData1.size);
+            field2_vinit(sampData, field);
           }
       }
     else
       {
-        if (field.numMissVals || !samp.empty())
+        if (field.numMissVals || !sampData.empty())
           {
-            if (samp.empty()) samp.resize(var1.size, numSets);
-            field2_vincr(samp, field);
+            if (sampData.empty()) sampData.resize(varData1.size, numSets);
+            field2_vincr(sampData, field);
           }
 
         // clang-format off
-        if      (lvarstd) field2_sumsumq(var1, var2, field);
-        else if (lrange)  field2_maxmin(var1, var2, field);
-        else if (lminidx) field2_minidx(var1, var2, field, numSets);
-        else if (lmaxidx) field2_maxidx(var1, var2, field, numSets);
-        else              field2_function(var1, field, operfunc);
+        if      (lvarstd) field2_sumsumq(varData1, varData2, field);
+        else if (lrange)  field2_maxmin(varData1, varData2, field);
+        else if (lminidx) field2_minidx(varData1, varData2, field, numSets);
+        else if (lmaxidx) field2_maxidx(varData1, varData2, field, numSets);
+        else              field2_function(varData1, field, operfunc);
         // clang-format on
       }
   }
 
   void
-  process_kernel(const Field &samp, Field &var1, const Field &var2, int numSets)
+  process_kernel(const Field &sampData, Field &varData1, const Field &varData2, int numSets)
   {
     auto field2_stdvar_func = lstd ? field2_std : field2_var;
     auto fieldc_stdvar_func = lstd ? fieldc_std : fieldc_var;
 
     if (lmeanavg)
       {
-        if (!samp.empty())
-          field2_div(var1, samp);
+        if (!sampData.empty())
+          field2_div(varData1, sampData);
         else
-          fieldc_div(var1, (double) numSets);
+          fieldc_div(varData1, (double) numSets);
       }
     else if (lvarstd)
       {
-        if (!samp.empty())
-          field2_stdvar_func(var1, var2, samp, divisor);
+        if (!sampData.empty())
+          field2_stdvar_func(varData1, varData2, sampData, divisor);
         else
-          fieldc_stdvar_func(var1, var2, numSets, divisor);
+          fieldc_stdvar_func(varData1, varData2, numSets, divisor);
       }
-    else if (lrange) { field2_sub(var1, var2); }
+    else if (lrange) { field2_sub(varData1, varData2); }
   }
 };
 
 class StepStat1Dvars : public StepStatBase
 {
 private:
-  FieldVector sampData;
+  FieldVector sampsData;
   FieldVector varsData1;
   FieldVector varsData2;
 
@@ -110,7 +110,7 @@ public:
   alloc(const VarList &varList, int VARS_MEMTYPE)
   {
     auto var2needed = (lvarstd || lrange || lminidx || lmaxidx);
-    field1Dvars_init(sampData, varList);
+    field1Dvars_init(sampsData, varList);
     field1Dvars_init(varsData1, varList, FIELD_VEC | VARS_MEMTYPE);
     field1Dvars_init(varsData2, varList, var2needed ? FIELD_VEC : 0);
   }
@@ -130,20 +130,20 @@ public:
   Field &
   samp(int varID)
   {
-    return sampData[varID];
+    return sampsData[varID];
   }
 
   void
   process(int varID, int numSets)
   {
-    process_kernel(sampData[varID], varsData1[varID], varsData2[varID], numSets);
+    process_kernel(sampsData[varID], varsData1[varID], varsData2[varID], numSets);
   }
 };
 
 class StepStat1Dlevels : public StepStatBase
 {
 private:
-  FieldVector sampData;
+  FieldVector sampsData;
   FieldVector varsData1;
   FieldVector varsData2;
 
@@ -152,7 +152,7 @@ public:
   alloc(const VarList &varList, int VARS_MEMTYPE)
   {
     auto var2needed = (lvarstd || lrange || lminidx || lmaxidx);
-    field1Dlevels_init(sampData, varList);
+    field1Dlevels_init(sampsData, varList);
     field1Dlevels_init(varsData1, varList, FIELD_VEC | VARS_MEMTYPE);
     field1Dlevels_init(varsData2, varList, var2needed ? FIELD_VEC : 0);
   }
@@ -166,13 +166,13 @@ public:
   void
   add_field(const Field &field, int levelID, int numSets)
   {
-    auto &samp = sampData[levelID];
-    auto &var1 = varsData1[levelID];
-    auto &var2 = varsData2[levelID];
+    auto &sampData = sampsData[levelID];
+    auto &varData1 = varsData1[levelID];
+    auto &varData2 = varsData2[levelID];
 
-    var1.nsamp++;
-    if (lrange) var2.nsamp++;
-    add_field_kernel(field, samp, var1, var2, numSets);
+    varData1.nsamp++;
+    if (lrange) varData2.nsamp++;
+    add_field_kernel(field, sampData, varData1, varData2, numSets);
   }
 
   void
@@ -184,7 +184,7 @@ public:
   void
   process(int levelID, int numSets)
   {
-    process_kernel(sampData[levelID], varsData1[levelID], varsData2[levelID], numSets);
+    process_kernel(sampsData[levelID], varsData1[levelID], varsData2[levelID], numSets);
   }
 };
 
@@ -192,12 +192,12 @@ class StepStat2D : public StepStatBase
 {
 private:
   Varray<double> vsamp;
-  FieldVector2D sampData;
+  FieldVector2D sampsData;
   FieldVector2D varsData1;
   FieldVector2D varsData2;
 
   static void
-  set_missval(Field &field, const Field &samp, int numSets, double vfraction)
+  set_missval(Field &field, const Field &sampData, int numSets, double vfraction)
   {
     auto fieldsize = field.size;
     auto missval = field.missval;
@@ -205,7 +205,7 @@ private:
     size_t irun = 0;
     for (size_t i = 0; i < fieldsize; ++i)
       {
-        if ((samp.vec_d[i] / numSets) < vfraction)
+        if ((sampData.vec_d[i] / numSets) < vfraction)
           {
             field.vec_d[i] = missval;
             irun++;
@@ -220,7 +220,7 @@ public:
   alloc(const VarList &varList, int VARS_MEMTYPE)
   {
     auto var2needed = (lvarstd || lrange || lminidx || lmaxidx);
-    field2D_init(sampData, varList);
+    field2D_init(sampsData, varList);
     field2D_init(varsData1, varList, FIELD_VEC | VARS_MEMTYPE);
     field2D_init(varsData2, varList, var2needed ? FIELD_VEC : 0);
   }
@@ -234,12 +234,12 @@ public:
   Varray<double> &
   samp(int varID, int levelID, int numSets)
   {
-    auto &samp = sampData[varID][levelID];
-    auto &var1 = varsData1[varID][levelID];
+    const auto &sampData = sampsData[varID][levelID];
+    const auto &varData1 = varsData1[varID][levelID];
 
-    vsamp.resize(var1.size);
-    if (!samp.empty())
-      vsamp = samp.vec_d;
+    vsamp.resize(varData1.size);
+    if (!sampData.empty())
+      vsamp = sampData.vec_d;
     else
       ranges::fill(vsamp, (double) numSets);
 
@@ -249,32 +249,31 @@ public:
   void
   add_field(const Field &field, int varID, int levelID, int numSets)
   {
-    auto &samp = sampData[varID][levelID];
-    auto &var1 = varsData1[varID][levelID];
-    auto &var2 = varsData2[varID][levelID];
+    auto &sampData = sampsData[varID][levelID];
+    auto &varData1 = varsData1[varID][levelID];
+    auto &varData2 = varsData2[varID][levelID];
 
-    add_field_kernel(field, samp, var1, var2, numSets);
+    add_field_kernel(field, sampData, varData1, varData2, numSets);
   }
 
   void
   set_missval(int varID, int levelID, int numSets, double vfraction)
   {
-    const auto &samp = sampData[varID][levelID];
-    auto &var2 = varsData2[varID][levelID];
-    if (!samp.empty()) set_missval(var2, samp, numSets, vfraction);
+    const auto &sampData = sampsData[varID][levelID];
+    if (!sampData.empty()) set_missval(varsData2[varID][levelID], sampData, numSets, vfraction);
   }
 
   void
   process(int varID, int levelID, int numSets)
   {
-    process_kernel(sampData[varID][levelID], varsData1[varID][levelID], varsData2[varID][levelID], numSets);
+    process_kernel(sampsData[varID][levelID], varsData1[varID][levelID], varsData2[varID][levelID], numSets);
   }
 };
 
 class StepStat3D : public StepStatBase
 {
 private:
-  FieldVector3D sampData;
+  FieldVector3D sampsData;
   FieldVector3D varsData1;
   FieldVector3D varsData2;
   int m_dimlen0{ 0 };
@@ -284,7 +283,7 @@ public:
   set_dimlen0(int dimlen0)
   {
     m_dimlen0 = dimlen0;
-    sampData.resize(dimlen0);
+    sampsData.resize(dimlen0);
     varsData1.resize(dimlen0);
     varsData2.resize(dimlen0);
   }
@@ -293,7 +292,7 @@ public:
   alloc(int dim0, const VarList &varList, int VARS_MEMTYPE)
   {
     auto var2needed = (lvarstd || lrange || lminidx || lmaxidx);
-    field2D_init(sampData[dim0], varList);
+    field2D_init(sampsData[dim0], varList);
     field2D_init(varsData1[dim0], varList, FIELD_VEC | VARS_MEMTYPE);
     field2D_init(varsData2[dim0], varList, var2needed ? FIELD_VEC : 0);
   }
@@ -301,13 +300,13 @@ public:
   FieldVector2D &
   samp(int dim0)
   {
-    return sampData[dim0];
+    return sampsData[dim0];
   }
 
   Field &
   samp(int dim0, int varID, int levelID)
   {
-    return sampData[dim0][varID][levelID];
+    return sampsData[dim0][varID][levelID];
   }
 
   FieldVector2D &
@@ -337,17 +336,17 @@ public:
   void
   add_field(const Field &field, int dim0, int varID, int levelID, int numSets)
   {
-    auto &samp = sampData[dim0][varID][levelID];
-    auto &var1 = varsData1[dim0][varID][levelID];
-    auto &var2 = varsData2[dim0][varID][levelID];
+    auto &sampData = sampsData[dim0][varID][levelID];
+    auto &varData1 = varsData1[dim0][varID][levelID];
+    auto &varData2 = varsData2[dim0][varID][levelID];
 
-    add_field_kernel(field, samp, var1, var2, numSets);
+    add_field_kernel(field, sampData, varData1, varData2, numSets);
   }
 
   void
   process(int dim0, int varID, int levelID, int numSets)
   {
-    process_kernel(sampData[dim0][varID][levelID], varsData1[dim0][varID][levelID], varsData2[dim0][varID][levelID], numSets);
+    process_kernel(sampsData[dim0][varID][levelID], varsData1[dim0][varID][levelID], varsData2[dim0][varID][levelID], numSets);
   }
 };
 
diff --git a/src/cdo_varlist.cc b/src/cdo_varlist.cc
index e902837db..03d350d33 100644
--- a/src/cdo_varlist.cc
+++ b/src/cdo_varlist.cc
@@ -211,7 +211,6 @@ varList_map(const VarList &varList1, const VarList &varList2, MapFlag mapFlag, s
 {
   auto cmpFlag{ CmpVarList::All };
   auto numVars1 = varList1.numVars();
-  auto numVars2 = varList2.numVars();
 
   if (mapFlag == MapFlag::Right)
     {
@@ -230,6 +229,7 @@ varList_map(const VarList &varList1, const VarList &varList2, MapFlag mapFlag, s
     {
       for (const auto &var1 : varList1.vars)
         {
+          auto numVars2 = varList2.numVars();
           int varID2;
           for (varID2 = 0; varID2 < numVars2; ++varID2)
             {
diff --git a/src/expr.cc b/src/expr.cc
index cfb88abf7..dbc846b1d 100644
--- a/src/expr.cc
+++ b/src/expr.cc
@@ -278,8 +278,6 @@ expr_con_var(int init, int oper, const nodeType *p1, const nodeType *p2)
   auto datatype = p2->param.datatype;
   auto missval2 = p2->param.missval;
 
-  auto n = ngp * nlev;
-
   auto p = new nodeType;
 
   p->type = NodeEnum::typeVar;
@@ -290,6 +288,7 @@ expr_con_var(int init, int oper, const nodeType *p1, const nodeType *p2)
 
   if (!init)
     {
+      auto n = ngp * nlev;
       p->param.data = new double[n];
       auto odat = p->param.data;
       const auto idat = p2->param.data;
@@ -313,8 +312,6 @@ expr_var_con(int init, int oper, const nodeType *p1, const nodeType *p2)
   auto datatype = p1->param.datatype;
   auto missval1 = p1->param.missval;
 
-  auto n = ngp * nlev;
-
   auto p = new nodeType;
 
   p->type = NodeEnum::typeVar;
@@ -325,6 +322,7 @@ expr_var_con(int init, int oper, const nodeType *p1, const nodeType *p2)
 
   if (!init)
     {
+      auto n = ngp * nlev;
       p->param.data = new double[n];
       auto odat = p->param.data;
       const auto idat = p1->param.data;
@@ -894,8 +892,6 @@ func_con_var(int init, int funcID, const nodeType *p1, const nodeType *p2)
   auto hasMV = (p2->param.numMissVals > 0);
   auto missval2 = p2->param.missval;
 
-  auto n = ngp * nlev;
-
   auto p = new nodeType;
 
   p->type = NodeEnum::typeVar;
@@ -906,6 +902,7 @@ func_con_var(int init, int funcID, const nodeType *p1, const nodeType *p2)
 
   if (!init)
     {
+      auto n = ngp * nlev;
       p->param.data = new double[n];
       auto odat = p->param.data;
       const auto idat = p2->param.data;
@@ -931,8 +928,6 @@ func_var_con(int init, int funcID, const nodeType *p1, const nodeType *p2)
   auto hasMV = (p1->param.numMissVals > 0);
   auto missval1 = p1->param.missval;
 
-  auto n = ngp * nlev;
-
   auto p = new nodeType;
 
   p->type = NodeEnum::typeVar;
@@ -943,6 +938,7 @@ func_var_con(int init, int funcID, const nodeType *p1, const nodeType *p2)
 
   if (!init)
     {
+      auto n = ngp * nlev;
       p->param.data = new double[n];
       auto odat = p->param.data;
       const auto idat = p1->param.data;
diff --git a/src/field.cc b/src/field.cc
index 8101d6230..4c8a53bb5 100644
--- a/src/field.cc
+++ b/src/field.cc
@@ -116,7 +116,7 @@ field_ncopy(size_t n, const Field &fieldIn, Field &fieldOut)
 
   fieldOut.numMissVals = fieldIn.numMissVals;
 
-  auto func = [&](auto &v1, auto &v2) { varray_copy(n, v1, v2); };
+  auto func = [&](const auto &v1, auto &v2) { varray_copy(n, v1, v2); };
   field_operation2(func, fieldIn, fieldOut);
 }
 
@@ -151,7 +151,7 @@ field_add(Field &field1, const Field3D &field2, int levelID)
 {
   auto size = field1.gridsize * field1.nwpv;
   auto offset = levelID * size;
-  auto func = [&](auto &v1, auto &v2) {
+  auto func = [&](auto &v1, const auto &v2) {
     for (size_t i = 0; i < size; ++i) v1[i] += v2[offset + i];
   };
   field_operation2(func, field1, field2);
@@ -188,7 +188,7 @@ public:
 size_t
 field_num_NANs(const Field &field)
 {
-  auto func = [&](auto &v, auto n) {
+  auto func = [&](const auto &v, auto n) {
     size_t numNANs = 0;
 #ifdef HAVE_OPENMP4
 #pragma omp parallel for simd if (n > cdoMinLoopSize) default(shared) schedule(static) reduction(+ : numNANs)
@@ -202,7 +202,7 @@ field_num_NANs(const Field &field)
 size_t
 field_num_mv(Field &field)
 {
-  auto func = [](auto &v, auto n, auto mv) { return varray_num_mv(n, v, mv); };
+  auto func = [](const auto &v, auto n, auto mv) { return varray_num_mv(n, v, mv); };
   field.numMissVals = field_operation(func, field, field.size, field.missval);
   return field.numMissVals;
 }
@@ -210,56 +210,56 @@ field_num_mv(Field &field)
 MinMax
 field_min_max(const Field &field)
 {
-  auto func = [](auto &v) { return varray_min_max(v); };
-  auto func_mv = [](auto &v, auto n, auto mv) { return varray_min_max_mv(n, v, mv); };
+  auto func = [](const auto &v) { return varray_min_max(v); };
+  auto func_mv = [](const auto &v, auto n, auto mv) { return varray_min_max_mv(n, v, mv); };
   return field.numMissVals ? field_operation(func_mv, field, field.size, field.missval) : field_operation(func, field);
 }
 
 double
 field_min(const Field &field)
 {
-  auto func = [](auto &v, auto n) { return varray_min(n, v); };
-  auto func_mv = [](auto &v, auto n, auto mv) { return varray_min_mv(n, v, mv); };
+  auto func = [](const auto &v, auto n) { return varray_min(n, v); };
+  auto func_mv = [](const auto &v, auto n, auto mv) { return varray_min_mv(n, v, mv); };
   return field.numMissVals ? field_operation(func_mv, field, field.size, field.missval) : field_operation(func, field, field.size);
 }
 
 double
 field_max(const Field &field)
 {
-  auto func = [](auto &v, auto n) { return varray_max(n, v); };
-  auto func_mv = [](auto &v, auto n, auto mv) { return varray_max_mv(n, v, mv); };
+  auto func = [](const auto &v, auto n) { return varray_max(n, v); };
+  auto func_mv = [](const auto &v, auto n, auto mv) { return varray_max_mv(n, v, mv); };
   return field.numMissVals ? field_operation(func_mv, field, field.size, field.missval) : field_operation(func, field, field.size);
 }
 
 double
 field_range(const Field &field)
 {
-  auto func = [](auto &v, auto n) { return varray_range(n, v); };
-  auto func_mv = [](auto &v, auto n, auto mv) { return varray_range_mv(n, v, mv); };
+  auto func = [](const auto &v, auto n) { return varray_range(n, v); };
+  auto func_mv = [](const auto &v, auto n, auto mv) { return varray_range_mv(n, v, mv); };
   return field.numMissVals ? field_operation(func_mv, field, field.size, field.missval) : field_operation(func, field, field.size);
 }
 
 double
 field_sum(const Field &field)
 {
-  auto func = [](auto &v, auto n) { return varray_sum(n, v); };
-  auto func_mv = [](auto &v, auto n, auto mv) { return varray_sum_mv(n, v, mv); };
+  auto func = [](const auto &v, auto n) { return varray_sum(n, v); };
+  auto func_mv = [](const auto &v, auto n, auto mv) { return varray_sum_mv(n, v, mv); };
   return field.numMissVals ? field_operation(func_mv, field, field.size, field.missval) : field_operation(func, field, field.size);
 }
 
 double
 field_mean(const Field &field)
 {
-  auto func = [](auto &v, auto n) { return varray_mean(n, v); };
-  auto func_mv = [](auto &v, auto n, auto mv) { return varray_mean_mv(n, v, mv); };
+  auto func = [](const auto &v, auto n) { return varray_mean(n, v); };
+  auto func_mv = [](const auto &v, auto n, auto mv) { return varray_mean_mv(n, v, mv); };
   return field.numMissVals ? field_operation(func_mv, field, field.size, field.missval) : field_operation(func, field, field.size);
 }
 
 double
 field_meanw(const Field &field)
 {
-  auto func = [](auto &v, auto n, auto mv, auto &w) { return varray_weighted_mean(n, v, w, mv); };
-  auto func_mv = [](auto &v, auto n, auto mv, auto &w) { return varray_weighted_mean_mv(n, v, w, mv); };
+  auto func = [](const auto &v, auto n, auto mv, const auto &w) { return varray_weighted_mean(n, v, w, mv); };
+  auto func_mv = [](const auto &v, auto n, auto mv, const auto &w) { return varray_weighted_mean_mv(n, v, w, mv); };
   return field.numMissVals ? field_operation(func_mv, field, field.size, field.missval, field.weightv)
                            : field_operation(func, field, field.size, field.missval, field.weightv);
 }
@@ -267,16 +267,16 @@ field_meanw(const Field &field)
 double
 field_avg(const Field &field)
 {
-  auto func = [](auto &v, auto n) { return varray_mean(n, v); };
-  auto func_mv = [](auto &v, auto n, auto mv) { return varray_avg_mv(n, v, mv); };
+  auto func = [](const auto &v, auto n) { return varray_mean(n, v); };
+  auto func_mv = [](const auto &v, auto n, auto mv) { return varray_avg_mv(n, v, mv); };
   return field.numMissVals ? field_operation(func_mv, field, field.size, field.missval) : field_operation(func, field, field.size);
 }
 
 double
 field_avgw(const Field &field)
 {
-  auto func = [](auto &v, auto n, auto mv, auto &w) { return varray_weighted_mean(n, v, w, mv); };
-  auto func_mv = [](auto &v, auto n, auto mv, auto &w) { return varray_weighted_avg_mv(n, v, w, mv); };
+  auto func = [](const auto &v, auto n, auto mv, const auto &w) { return varray_weighted_mean(n, v, w, mv); };
+  auto func_mv = [](const auto &v, auto n, auto mv, const auto &w) { return varray_weighted_avg_mv(n, v, w, mv); };
   return field.numMissVals ? field_operation(func_mv, field, field.size, field.missval, field.weightv)
                            : field_operation(func, field, field.size, field.missval, field.weightv);
 }
@@ -284,56 +284,60 @@ field_avgw(const Field &field)
 double
 field_var(const Field &field)
 {
-  auto func = [](auto &v, auto n, auto numMissVals, auto mv) { return varray_var(n, v, numMissVals, mv); };
+  auto func = [](const auto &v, auto n, auto numMissVals, auto mv) { return varray_var(n, v, numMissVals, mv); };
   return field_operation(func, field, field.size, field.numMissVals, field.missval);
 }
 
 double
 field_var1(const Field &field)
 {
-  auto func = [](auto &v, auto n, auto numMissVals, auto mv) { return varray_var_1(n, v, numMissVals, mv); };
+  auto func = [](const auto &v, auto n, auto numMissVals, auto mv) { return varray_var_1(n, v, numMissVals, mv); };
   return field_operation(func, field, field.size, field.numMissVals, field.missval);
 }
 
 double
 field_skew(const Field &field)
 {
-  auto func = [](auto &v, auto n, auto numMissVals, auto mv) { return varray_skew(n, v, numMissVals, mv); };
+  auto func = [](const auto &v, auto n, auto numMissVals, auto mv) { return varray_skew(n, v, numMissVals, mv); };
   return field_operation(func, field, field.size, field.numMissVals, field.missval);
 }
 
 double
 field_kurt(const Field &field)
 {
-  auto func = [](auto &v, auto n, auto numMissVals, auto mv) { return varray_kurt(n, v, numMissVals, mv); };
+  auto func = [](const auto &v, auto n, auto numMissVals, auto mv) { return varray_kurt(n, v, numMissVals, mv); };
   return field_operation(func, field, field.size, field.numMissVals, field.missval);
 }
 
 double
 field_median(const Field &field)
 {
-  auto func = [](auto &v, auto n, auto numMissVals, auto mv) { return varray_median(n, v, numMissVals, mv); };
+  auto func = [](const auto &v, auto n, auto numMissVals, auto mv) { return varray_median(n, v, numMissVals, mv); };
   return field_operation(func, field, field.size, field.numMissVals, field.missval);
 }
 
 double
 field_count(const Field &field)
 {
-  auto func = [](auto &v, auto n, auto numMissVals, auto mv) { return varray_count(n, v, numMissVals, mv); };
+  auto func = [](const auto &v, auto n, auto numMissVals, auto mv) { return varray_count(n, v, numMissVals, mv); };
   return field_operation(func, field, field.size, field.numMissVals, field.missval);
 }
 
 double
 field_varw(const Field &field)
 {
-  auto func = [](auto &v, auto n, auto numMissVals, auto mv, auto &w) { return varray_weighted_var(n, v, w, numMissVals, mv); };
+  auto func = [](const auto &v, auto n, auto numMissVals, auto mv, const auto &w) {
+    return varray_weighted_var(n, v, w, numMissVals, mv);
+  };
   return field_operation(func, field, field.size, field.numMissVals, field.missval, field.weightv);
 }
 
 double
 field_var1w(const Field &field)
 {
-  auto func = [](auto &v, auto n, auto numMissVals, auto mv, auto &w) { return varray_weighted_var_1(n, v, w, numMissVals, mv); };
+  auto func = [](const auto &v, auto n, auto numMissVals, auto mv, const auto &w) {
+    return varray_weighted_var_1(n, v, w, numMissVals, mv);
+  };
   return field_operation(func, field, field.size, field.numMissVals, field.missval, field.weightv);
 }
 
diff --git a/src/field2.cc b/src/field2.cc
index 34715b411..1f271594d 100644
--- a/src/field2.cc
+++ b/src/field2.cc
@@ -82,7 +82,7 @@ varray2_arith(Varray<T1> &v1, const Varray<T2> &v2, size_t n, FUNC func)
   for (size_t i = 0; i < n; ++i) { v1[i] = func(v1[i], v2[i]); }
 }
 
-auto varray2_func = [](auto &v1, auto &v2, size_t n, auto arith_func) { varray2_arith(v1, v2, n, arith_func); };
+auto varray2_func = [](auto &v1, const auto &v2, size_t n, auto arith_func) { varray2_arith(v1, v2, n, arith_func); };
 
 template <typename T1, typename T2, typename FUNC>
 static void
@@ -113,7 +113,7 @@ varray2_arith_mv(Varray<T1> &v1, const Varray<T2> &v2, size_t n, double missval1
     }
 }
 
-auto varray2_func_mv = [](auto &v1, auto &v2, size_t n, double mv1, double mv2, auto arith_mv_func) {
+auto varray2_func_mv = [](auto &v1, const auto &v2, size_t n, double mv1, double mv2, auto arith_mv_func) {
   varray2_arith_mv(v1, v2, n, mv1, mv2, arith_mv_func);
 };
 
@@ -156,7 +156,7 @@ field2_vinit(Field &field1, const Field &field2, int vinit)
     for (size_t i = 0; i < n; ++i) v1[i] = (fp_is_equal(v2[i], missval)) ? 0 : vinit;
   };
   */
-  auto func = [&](auto &v1, auto &v2, size_t n, double mv) { field2_vinit(v1, v2, n, mv, vinit); };
+  auto func = [&](auto &v1, const auto &v2, size_t n, double mv) { field2_vinit(v1, v2, n, mv, vinit); };
   field_operation2(func, field1, field2, field2.size, field2.missval);
 
   field1.numMissVals = field2.numMissVals;
@@ -177,7 +177,7 @@ field2_vincr(Field &field1, const Field &field2, int vincr)
 {
   if (field1.size != field2.size) cdo_abort("Fields have different size (%s)", __func__);
 
-  auto func = [&](auto &v1, auto &v2, size_t n, double mv) { field2_vincr(v1, v2, n, mv, vincr); };
+  auto func = [&](auto &v1, const auto &v2, size_t n, double mv) { field2_vincr(v1, v2, n, mv, vincr); };
   field_operation2(func, field1, field2, field2.size, field2.missval);
 
   field1.numMissVals = field2.numMissVals;
@@ -386,7 +386,7 @@ field2_div(Field &field1, const Field &field2)
     }
   else
     {
-      auto func = [](auto &v1, auto &v2, size_t n, double mv) { varray2_div(v1, v2, n, mv); };
+      auto func = [](auto &v1, const auto &v2, size_t n, double mv) { varray2_div(v1, v2, n, mv); };
       field_operation2(func, field1, field2, field1.size, field1.missval);
       field_num_mv(field1);
     }
@@ -404,15 +404,15 @@ field2_atan2(Field &field1, const Field &field2)
 void
 field2_set_miss(Field &field1, const Field &field2)
 {
-  auto missval1 = field1.missval;
-  auto &array1 = field1.vec_d;
-  const auto &array2 = field2.vec_d;
-
   auto len = field1.size;
   if (len != field2.size) cdo_abort("Fields have different size (%s)", __func__);
 
   if (field1.numMissVals)
     {
+      auto missval1 = field1.missval;
+      auto &array1 = field1.vec_d;
+      const auto &array2 = field2.vec_d;
+
       for (size_t i = 0; i < len; ++i) array1[i] = fp_is_equal(array1[i], missval1) ? array2[i] : array1[i];
 
       field_num_mv(field1);
@@ -495,7 +495,7 @@ field2_minidx(Field &field1, Field &field2, const Field &field3, int idx)
 {
   if (field1.size != field3.size) cdo_abort("Fields have different size (%s)", __func__);
   if (field2.size != field3.size) cdo_abort("Fields have different size (%s)", __func__);
-  auto func = [&](auto &v3) { field2_minidx(field3.numMissVals, field3.size, field3.missval, field1, field2, v3, idx); };
+  auto func = [&](const auto &v3) { field2_minidx(field3.numMissVals, field3.size, field3.missval, field1, field2, v3, idx); };
   field_operation(func, field3);
 }
 
@@ -537,7 +537,7 @@ field2_maxidx(Field &field1, Field &field2, const Field &field3, int idx)
 {
   if (field1.size != field3.size) cdo_abort("Fields have different size (%s)", __func__);
   if (field2.size != field3.size) cdo_abort("Fields have different size (%s)", __func__);
-  auto func = [&](auto &v3) { field2_maxidx(field3.numMissVals, field3.size, field3.missval, field1, field2, v3, idx); };
+  auto func = [&](const auto &v3) { field2_maxidx(field3.numMissVals, field3.size, field3.missval, field1, field2, v3, idx); };
   field_operation(func, field3);
 }
 
@@ -790,7 +790,7 @@ field2_count(Field &field1, const Field &field2)
 
   if (field1.numMissVals || field2.numMissVals)
     {
-      auto func = [](auto &v1, auto &v2, size_t n, double mv1, double mv2) { varray2_count_mv(v1, v2, n, mv1, mv2); };
+      auto func = [](auto &v1, const auto &v2, size_t n, double mv1, double mv2) { varray2_count_mv(v1, v2, n, mv1, mv2); };
       field_operation2(func, field1, field2, field1.size, field1.missval, field2.missval);
       field_num_mv(field1);
     }
diff --git a/src/field_meridional.cc b/src/field_meridional.cc
index b56d6e66e..06d03927f 100644
--- a/src/field_meridional.cc
+++ b/src/field_meridional.cc
@@ -38,7 +38,7 @@ meridional_kernel_1(const Field &field1, Field &field2, funcType1 func, funcType
 
   for (size_t i = 0; i < nx; ++i)
     {
-      auto func_copy_meridional = [&](auto &v1) { varray_copy_meridional(i, nx, ny, v1, v); };
+      auto func_copy_meridional = [&](const auto &v1) { varray_copy_meridional(i, nx, ny, v1, v); };
       field_operation(func_copy_meridional, field1);
 
       auto result = numMissVals ? funcMV(ny, v, missval) : func(ny, v);
@@ -63,7 +63,7 @@ meridional_kernel_2(const Field &field1, Field &field2, funcType2 func, funcType
   for (size_t i = 0; i < nx; ++i)
     {
       varray_copy_meridional(i, nx, ny, field1.weightv, w);
-      auto func_copy_meridional = [&](auto &v1) { varray_copy_meridional(i, nx, ny, v1, v); };
+      auto func_copy_meridional = [&](const auto &v1) { varray_copy_meridional(i, nx, ny, v1, v); };
       field_operation(func_copy_meridional, field1);
 
       auto result = numMissVals ? funcMV(ny, v, w, missval) : func(ny, v, w, missval);
@@ -88,7 +88,7 @@ meridional_kernel_3(const Field &field1, Field &field2, funcType3 func)
   for (size_t i = 0; i < nx; ++i)
     {
       varray_copy_meridional(i, nx, ny, field1.weightv, w);
-      auto func_copy_meridional = [&](auto &v1) { varray_copy_meridional(i, nx, ny, v1, v); };
+      auto func_copy_meridional = [&](const auto &v1) { varray_copy_meridional(i, nx, ny, v1, v); };
       field_operation(func_copy_meridional, field1);
 
       auto result = func(ny, v, w, numMissVals, missval);
@@ -112,7 +112,7 @@ meridional_kernel_4(const Field &field1, Field &field2, funcType4 func)
 
   for (size_t i = 0; i < nx; ++i)
     {
-      auto func_copy_meridional = [&](auto &v1) { varray_copy_meridional(i, nx, ny, v1, v); };
+      auto func_copy_meridional = [&](const auto &v1) { varray_copy_meridional(i, nx, ny, v1, v); };
       field_operation(func_copy_meridional, field1);
 
       auto numMissval = ny - varray_count(ny, v, numMissVals, missval);
@@ -266,7 +266,7 @@ meridional_pctl(const Field &field1, Field &field2, double pn)
         {
           if (ny > 0)
             {
-              auto func_copy_meridional = [&](auto &v1) { varray_copy_meridional(i, nx, ny, v1, v); };
+              auto func_copy_meridional = [&](const auto &v1) { varray_copy_meridional(i, nx, ny, v1, v); };
               field_operation(func_copy_meridional, field1);
 
               field2.vec_d[i] = percentile(v.data(), ny, pn);
diff --git a/src/field_trend.cc b/src/field_trend.cc
index 20afba06f..c27770e00 100644
--- a/src/field_trend.cc
+++ b/src/field_trend.cc
@@ -53,7 +53,7 @@ void
 calc_trend_sum(FieldVector3D &work, const Field &field, double zj, int varID, int levelID)
 {
   auto hasMissvals = (field.numMissVals > 0);
-  auto func = [&](auto &v) { calc_trend_sum(work, hasMissvals, field.size, v, field.missval, zj, varID, levelID); };
+  auto func = [&](const auto &v) { calc_trend_sum(work, hasMissvals, field.size, v, field.missval, zj, varID, levelID); };
   field_operation(func, field);
 }
 
diff --git a/src/field_zonal.cc b/src/field_zonal.cc
index d7d1d3498..e039f2bc6 100644
--- a/src/field_zonal.cc
+++ b/src/field_zonal.cc
@@ -24,7 +24,7 @@ varray_copy_zonal(size_t offset, size_t nx, const Varray<T> &v1, Varray<double>
 static void
 copy_latitude_row(size_t offset, size_t nx, const Field &field1, Varray<double> &v)
 {
-  auto func = [&](auto &v1) { varray_copy_zonal(offset, nx, v1, v); };
+  auto func = [&](const auto &v1) { varray_copy_zonal(offset, nx, v1, v); };
   field_operation(func, field1);
 }
 
diff --git a/src/param_conversion.cc b/src/param_conversion.cc
index 481bd0f89..07906372b 100644
--- a/src/param_conversion.cc
+++ b/src/param_conversion.cc
@@ -72,7 +72,7 @@ parameter_to_double(const char *const cstring)
 {
   char *endptr = nullptr;
   auto fval = strtod(cstring, &endptr);
-  if (*endptr && *endptr == 'f') endptr++;
+  if (*endptr == 'f') endptr++;
   if (*endptr) parameter_error("Float", cstring, endptr);
   return fval;
 }
diff --git a/src/process.cc b/src/process.cc
index 2f91d8fb5..2e7a48f8e 100644
--- a/src/process.cc
+++ b/src/process.cc
@@ -288,7 +288,7 @@ Process::set_obase(const std::string &obase)
   m_obase = obase;
 }  // TODO into cc
 
-const std::string
+const std::string &
 Process::get_obase()
 {
   return m_obase;
diff --git a/src/process.h b/src/process.h
index 544a66692..dd5eba310 100644
--- a/src/process.h
+++ b/src/process.h
@@ -132,7 +132,7 @@ public:
   size_t get_oper_argc();
   std::string get_argv(int idx);
 
-  const std::string get_obase();
+  const std::string &get_obase();
   void set_obase(const std::string &obase);
 
   int get_id();
diff --git a/src/remap_bicubic.cc b/src/remap_bicubic.cc
index 786f8ae62..d85c0f230 100644
--- a/src/remap_bicubic.cc
+++ b/src/remap_bicubic.cc
@@ -339,7 +339,8 @@ remap_bicubic(const Varray<T1> &srcArray, Varray<T2> &tgtArray, double srcMissva
 void
 remap_bicubic(RemapSearch &remapSearch, const Field &field1, Field &field2)
 {
-  auto func
-      = [&](auto &v1, auto &v2, double missval, size_t numMissVals) { remap_bicubic(v1, v2, missval, numMissVals, remapSearch); };
+  auto func = [&](const auto &v1, auto &v2, double missval, size_t numMissVals) {
+    remap_bicubic(v1, v2, missval, numMissVals, remapSearch);
+  };
   field_operation2(func, field1, field2, field1.missval, field1.numMissVals);
 }
diff --git a/src/remap_bilinear.cc b/src/remap_bilinear.cc
index 9f6aa88d3..3cf18dc47 100644
--- a/src/remap_bilinear.cc
+++ b/src/remap_bilinear.cc
@@ -455,7 +455,8 @@ remap_bilinear(const Varray<T1> &srcArray, Varray<T2> &tgtArray, double srcMissv
 void
 remap_bilinear(RemapSearch &remapSearch, const Field &field1, Field &field2)
 {
-  auto func
-      = [&](auto &v1, auto &v2, double missval, size_t numMissVals) { remap_bilinear(v1, v2, missval, numMissVals, remapSearch); };
+  auto func = [&](const auto &v1, auto &v2, double missval, size_t numMissVals) {
+    remap_bilinear(v1, v2, missval, numMissVals, remapSearch);
+  };
   field_operation2(func, field1, field2, field1.missval, field1.numMissVals);
 }
diff --git a/src/remap_conserv.cc b/src/remap_conserv.cc
index 61aadba90..5dbf04c97 100644
--- a/src/remap_conserv.cc
+++ b/src/remap_conserv.cc
@@ -831,7 +831,7 @@ remap_conserv(const Varray<T1> &srcArray, Varray<T2> &tgtArray, double srcMissva
 void
 remap_conserv(NormOpt normOpt, RemapSearch &remapSearch, const Field &field1, Field &field2)
 {
-  auto func = [&](auto &v1, auto &v2, double missval, size_t numMissVals) {
+  auto func = [&](const auto &v1, auto &v2, double missval, size_t numMissVals) {
     remap_conserv(v1, v2, missval, numMissVals, normOpt, remapSearch);
   };
   field_operation2(func, field1, field2, field1.missval, field1.numMissVals);
@@ -1052,6 +1052,6 @@ remap_zonal_mean(const Varray<T1> &srcArray, Varray<T2> &tgtArray, double srcMis
 void
 remap_zonal_mean(const Varray2D<size_t> &remapIndices, const Varray2D<double> &remapWeights, const Field &field1, Field &field2)
 {
-  auto func = [&](auto &v1, auto &v2, double missval) { remap_zonal_mean(v1, v2, missval, remapIndices, remapWeights); };
+  auto func = [&](const auto &v1, auto &v2, double missval) { remap_zonal_mean(v1, v2, missval, remapIndices, remapWeights); };
   field_operation2(func, field1, field2, field1.missval);
 }
diff --git a/src/remap_distwgt.cc b/src/remap_distwgt.cc
index f729bcec5..171093550 100644
--- a/src/remap_distwgt.cc
+++ b/src/remap_distwgt.cc
@@ -159,7 +159,7 @@ remap_distwgt(const Varray<T1> &srcArray, Varray<T2> &tgtArray, double srcMissva
 void
 remap_distwgt(size_t numNeighbors, RemapSearch &remapSearch, const Field &field1, Field &field2)
 {
-  auto func = [&](auto &v1, auto &v2, double missval, size_t numMissVals) {
+  auto func = [&](const auto &v1, auto &v2, double missval, size_t numMissVals) {
     remap_distwgt(v1, v2, missval, numMissVals, numNeighbors, remapSearch);
   };
   field_operation2(func, field1, field2, field1.missval, field1.numMissVals);
diff --git a/src/remap_vars.cc b/src/remap_vars.cc
index 66917e90e..579f150b7 100644
--- a/src/remap_vars.cc
+++ b/src/remap_vars.cc
@@ -240,7 +240,7 @@ remap(const Varray<T1> &srcArray, Varray<T2> &tgtArray, double tgtMissval, size_
 void
 remap_field(Field &field2, double missval, size_t gridsize2, const RemapVars &rv, const Field &field1, RemapGradients &gradients)
 {
-  auto func = [&](auto &v1, auto &v2) { remap(v1, v2, missval, gridsize2, rv, gradients); };
+  auto func = [&](const auto &v1, auto &v2) { remap(v1, v2, missval, gridsize2, rv, gradients); };
   field_operation2(func, field1, field2);
 }
 
@@ -393,7 +393,7 @@ remap_laf(const Varray<T1> &srcArray, Varray<T2> &tgtArray, double tgtMissval, s
 void
 remap_laf(Field &field2, double missval, size_t gridsize2, const RemapVars &rv, const Field &field1)
 {
-  auto func = [&](auto &v1, auto &v2) { remap_laf(v1, v2, missval, gridsize2, rv); };
+  auto func = [&](const auto &v1, auto &v2) { remap_laf(v1, v2, missval, gridsize2, rv); };
   field_operation2(func, field1, field2);
 }
 
@@ -492,7 +492,7 @@ remap_avg(const Varray<T1> &srcArray, Varray<T2> &tgtArray, double tgtMissval, s
 void
 remap_avg(Field &field2, double missval, size_t gridsize2, const RemapVars &rv, const Field &field1)
 {
-  auto func = [&](auto &v1, auto &v2) { remap_avg(v1, v2, missval, gridsize2, rv); };
+  auto func = [&](const auto &v1, auto &v2) { remap_avg(v1, v2, missval, gridsize2, rv); };
   field_operation2(func, field1, field2);
 }
 
diff --git a/src/remaplib.cc b/src/remaplib.cc
index 1e7d3ab52..63a370467 100644
--- a/src/remaplib.cc
+++ b/src/remaplib.cc
@@ -948,7 +948,7 @@ remap_stat(const Varray<T1> &array1, const Varray<T2> &array2, double missval, i
 void
 remap_stat(int remapOrder, RemapGrid &srcGrid, RemapGrid &tgtGrid, RemapVars &rv, const Field &field1, const Field &field2)
 {
-  auto func = [&](auto &v1, auto &v2, double mv1) { remap_stat(v1, v2, mv1, remapOrder, srcGrid, tgtGrid, rv); };
+  auto func = [&](const auto &v1, auto &v2, double mv1) { remap_stat(v1, v2, mv1, remapOrder, srcGrid, tgtGrid, rv); };
   field_operation2(func, field1, field2, field1.missval);
 }
 
@@ -1190,6 +1190,6 @@ template void remap_set_mask(const Varray<double> &v, size_t gridsize, size_t nu
 void
 remap_set_mask(const Field &field1, size_t gridsize, size_t numMissVals, double missval, Varray<int8_t> &imask)
 {
-  auto func = [&](auto &v) { remap_set_mask(v, gridsize, numMissVals, missval, imask); };
+  auto func = [&](const auto &v) { remap_set_mask(v, gridsize, numMissVals, missval, imask); };
   field_operation(func, field1);
 }
diff --git a/src/util_string.h b/src/util_string.h
index 410e9a387..7e8e1629b 100644
--- a/src/util_string.h
+++ b/src/util_string.h
@@ -52,7 +52,7 @@ string_format(const std::string &format, Args... args)
   auto size = static_cast<size_t>(size_s);
   std::unique_ptr<char[]> buf(new char[size]);
   std::snprintf(buf.get(), size, format.c_str(), args...);
-  return std::string(buf.get(), buf.get() + size - 1);  // We don't want the '\0' inside
+  return std::string(buf.get(), static_cast<char *>(buf.get()) + size - 1);  // We don't want the '\0' inside
 }
 
 namespace Util
-- 
GitLab