diff --git a/src/Varsstat.cc b/src/Varsstat.cc index 57cd75c7969cdb5555728ac48e74f5e7687f3a6f..f4d2d72c764fa01a7b757a1e540bf659dc594eef 100644 --- a/src/Varsstat.cc +++ b/src/Varsstat.cc @@ -11,7 +11,7 @@ #include "field_functions.h" static void -checkUniqueZaxis(int vlistID) +check_unique_zaxis(int vlistID) { auto nzaxis = vlistNzaxis(vlistID); auto zaxisID = vlistZaxis(vlistID, 0); @@ -23,7 +23,7 @@ checkUniqueZaxis(int vlistID) } static void -checkUniqueGridsize(int vlistID) +check_unique_gridsize(int vlistID) { auto ngrids = vlistNgrids(vlistID); auto gridID = vlistGrid(vlistID, 0); @@ -35,13 +35,13 @@ checkUniqueGridsize(int vlistID) } static void -setAttributes(const VarList &varList1, int vlistID2, int varID2, int operatorID) +set_attributes(const VarList &varList1, int vlistID2, int varID2, int operatorID) { const auto &var0 = varList1[0]; auto paramIsEqual = true; auto name = var0.name; auto param = var0.param; - const int nvars = varList1.size(); + int nvars = varList1.size(); for (int varID = 1; varID < nvars; ++varID) { if (param != varList1[varID].param || name != varList1[varID].name) @@ -53,6 +53,8 @@ setAttributes(const VarList &varList1, int vlistID2, int varID2, int operatorID) if (!paramIsEqual) name = cdo_operator_name(operatorID); cdiDefKeyString(vlistID2, varID2, CDI_KEY_NAME, name.c_str()); + vlistDefVarMissval(vlistID2, varID2, var0.missval); + if (paramIsEqual) { if (param >= 0) vlistDefVarParam(vlistID2, varID2, param); @@ -62,7 +64,7 @@ setAttributes(const VarList &varList1, int vlistID2, int varID2, int operatorID) } static void -addOperators(void) +add_operators(void) { // clang-format off cdo_operator_add("varsrange", FieldFunc_Range, 0, nullptr); @@ -83,7 +85,7 @@ Varsstat(void *process) { cdo_initialize(process); - addOperators(); + add_operators(); auto operatorID = cdo_operator_id(); auto operfunc = cdo_operator_f1(operatorID); @@ -95,7 +97,7 @@ Varsstat(void *process) auto lstd = (operfunc == FieldFunc_Std || operfunc == FieldFunc_Std1); auto lvarstd = (lstd || operfunc == FieldFunc_Var || operfunc == FieldFunc_Var1); auto lvars2 = (lvarstd || lrange); - const int divisor = (operfunc == FieldFunc_Std1 || operfunc == FieldFunc_Var1); + int divisor = (operfunc == FieldFunc_Std1 || operfunc == FieldFunc_Var1); auto field2_stdvar_func = lstd ? field2_std : field2_var; auto fieldc_stdvar_func = lstd ? fieldc_std : fieldc_var; @@ -106,11 +108,11 @@ Varsstat(void *process) VarList varList1; varListInit(varList1, vlistID1); - checkUniqueZaxis(vlistID1); + check_unique_zaxis(vlistID1); auto zaxisID = vlistZaxis(vlistID1, 0); auto nlevels = zaxisInqSize(zaxisID); - checkUniqueGridsize(vlistID1); + check_unique_gridsize(vlistID1); auto gridID = vlistGrid(vlistID1, 0); auto gridsize = gridInqSize(gridID); @@ -125,7 +127,7 @@ Varsstat(void *process) vlistDefNtsteps(vlistID2, vlistNtsteps(vlistID1)); auto varID2 = vlistDefVar(vlistID2, gridID, zaxisID, timetype); - setAttributes(varList1, vlistID2, varID2, operatorID); + set_attributes(varList1, vlistID2, varID2, operatorID); auto taxisID1 = vlistInqTaxis(vlistID1); auto taxisID2 = taxisDuplicate(taxisID1);