From 09e1eea45ea5717bd4ea0faa764740047c65cda9 Mon Sep 17 00:00:00 2001 From: Uwe Schulzweida <uwe.schulzweida@mpimet.mpg.de> Date: Mon, 17 Mar 2025 13:51:51 +0100 Subject: [PATCH] Detrend: failed if missing_value is between 0 and numSteps (bug fix) --- ChangeLog | 2 +- NEWS | 5 +++++ src/Detrend.cc | 8 ++++---- src/Trend.cc | 4 ++-- src/field_trend.cc | 6 +++--- 5 files changed, 15 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index 449802dd9..211f29c28 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,6 @@ 2025-03-15 Uwe Schulzweida - * timpctl: Missing error handling for CDO_PCTL_NBINS>32768 (bug fix) + * timpctl: Short integer overflow for CDO_PCTL_NBINS>32768 (bug fix) 2025-03-14 Uwe Schulzweida diff --git a/NEWS b/NEWS index ef15a1a5a..c27aea57a 100644 --- a/NEWS +++ b/NEWS @@ -3,11 +3,16 @@ CDO NEWS Improvement +Version 2.5.2 (15 Mar 2025): + New features: * option --chunkspec to define chunkSize of t and z dimension New operators: * air_density * setchunkspec - Specify chunking + Fixed bugs: + * timpctl: Short integer overflow for CDO_PCTL_NBINS>32768 + * enable-hirlam-extensions failed since release 2.5.1 Version 2.5.1 (5 Mar 2025): diff --git a/src/Detrend.cc b/src/Detrend.cc index c6043e01a..89a1d300f 100644 --- a/src/Detrend.cc +++ b/src/Detrend.cc @@ -129,11 +129,11 @@ public: auto const &zn = work[4][varID][levelID].vec_d; auto trend_kernel = [&](auto i, auto is_EQ) { - auto temp1 = SUBM(sumjx[i], DIVM(MULM(sumj[i], sumx[i]), zn[i])); - auto temp2 = SUBM(sumjj[i], DIVM(MULM(sumj[i], sumj[i]), zn[i])); + auto temp1 = SUBM(sumjx[i], DIVX(MULM(sumj[i], sumx[i]), zn[i])); + auto temp2 = SUBM(sumjj[i], DIVX(MULM(sumj[i], sumj[i]), zn[i])); auto temp3 = DIVM(temp1, temp2); - paramA[i] = SUBM(DIVM(sumx[i], zn[i]), MULM(DIVM(sumj[i], zn[i]), temp3)); + paramA[i] = SUBM(DIVX(sumx[i], zn[i]), MULM(DIVX(sumj[i], zn[i]), temp3)); paramB[i] = temp3; }; @@ -146,7 +146,7 @@ public: } static void - vars_sub_trend(FieldVector3D &work, FieldVector2D &varsData, const VarList &varList, double zj) + vars_sub_trend(FieldVector3D &work, FieldVector2D &varsData, VarList const &varList, double zj) { auto numVars = varList.numVars(); for (int varID = 0; varID < numVars; ++varID) diff --git a/src/Trend.cc b/src/Trend.cc index 9c9099163..ea2badeb0 100644 --- a/src/Trend.cc +++ b/src/Trend.cc @@ -123,7 +123,7 @@ public: } void - write_output(const FieldVector3D &work) + write_output(FieldVector3D const &work) { Field field2, field3; @@ -198,7 +198,7 @@ public: } static void - fields_calc_trend_sum(FieldVector3D &work, const FieldVector2D &fields2D, const std::vector<FieldInfo> &fieldInfoList, + fields_calc_trend_sum(FieldVector3D &work, FieldVector2D const &fields2D, std::vector<FieldInfo> const &fieldInfoList, double zj) noexcept { for (auto const &fieldInfo : fieldInfoList) diff --git a/src/field_trend.cc b/src/field_trend.cc index 9155952d0..a1da6d78d 100644 --- a/src/field_trend.cc +++ b/src/field_trend.cc @@ -99,11 +99,11 @@ calc_trend_param(const FieldVector3D &work, Field ¶mA, Field ¶mB, int va auto const &zn = work[4][varID][levelID].vec_d; auto trend_kernel = [&](auto i, auto is_EQ) { - auto temp1 = SUBM(sumjx[i], DIVM(MULM(sumj[i], sumx[i]), zn[i])); - auto temp2 = SUBM(sumjj[i], DIVM(MULM(sumj[i], sumj[i]), zn[i])); + auto temp1 = SUBM(sumjx[i], DIVX(MULM(sumj[i], sumx[i]), zn[i])); + auto temp2 = SUBM(sumjj[i], DIVX(MULM(sumj[i], sumj[i]), zn[i])); auto temp3 = DIVM(temp1, temp2); - paramA.vec_d[i] = SUBM(DIVM(sumx[i], zn[i]), MULM(DIVM(sumj[i], zn[i]), temp3)); + paramA.vec_d[i] = SUBM(DIVX(sumx[i], zn[i]), MULM(DIVX(sumj[i], zn[i]), temp3)); paramB.vec_d[i] = temp3; }; -- GitLab