Merge branch 'feature/ECC-1620_sub-hourly' into feature/ECC-1620_sub-hourly_string

This commit is contained in:
Eugen Betke 2023-11-03 12:08:33 +00:00
commit 538aa336c5
3 changed files with 9 additions and 7 deletions

View File

@ -75,16 +75,14 @@ bool Step::operator<(const Step& step) const
Step Step::operator+(const Step& step) const
{
Step tmp = step;
auto [a, b] = find_common_units(this->copy().optimize_unit(), tmp.copy().optimize_unit());
auto [a, b] = find_common_units(this->copy().optimize_unit(), step.copy().optimize_unit());
assert(a.internal_unit_ == b.internal_unit_);
return Step(a.internal_value_ + b.internal_value_, a.internal_unit_);
}
Step Step::operator-(const Step& step) const
{
Step tmp = step;
auto [a, b] = find_common_units(this->copy().optimize_unit(), tmp.copy().optimize_unit());
auto [a, b] = find_common_units(this->copy().optimize_unit(), step.copy().optimize_unit());
assert(a.internal_unit_ == b.internal_unit_);
return Step(a.internal_value_ - b.internal_value_, a.internal_unit_);
}
@ -155,10 +153,11 @@ Step& Step::optimize_unit()
unit_ = internal_unit_;
Seconds<long> seconds = to_seconds<long>(internal_value_, internal_unit_);
long abs_seconds = seconds.count() < 0 ? -seconds.count() : seconds.count();
for (auto it = Unit::grib_selected_units.rbegin(); it != Unit::grib_selected_units.rend(); ++it) {
auto multiplier = Unit::get_converter().unit_to_duration(*it);
if (seconds.count() % multiplier == 0) {
long multiplier = Unit::get_converter().unit_to_duration(*it);
if (abs_seconds % multiplier == 0) {
internal_value_ = seconds.count() / multiplier;
internal_unit_ = *it;
unit_ = *it;

View File

@ -81,7 +81,7 @@ private:
}
Seconds<long> seconds = to_seconds<long>(internal_value_, internal_unit_);
auto multiplier = Unit::get_converter().unit_to_duration(unit_.value<Unit::Value>());
long multiplier = Unit::get_converter().unit_to_duration(unit_.value<Unit::Value>());
internal_value_ = seconds.count() / multiplier;
internal_unit_ = unit_;

View File

@ -56,6 +56,9 @@ grib_check_key_equals $temp "-s stepUnits:s=h -p startStep:s,endStep:s" "-6 0"
grib_check_key_equals $temp "-s stepUnits:s=m -p startStep:s,endStep:s" "-360m 0m"
grib_check_key_equals $temp "-s stepUnits:s=s -p startStep:s,endStep:s" "-21600s 0s"
${tools_dir}/grib_set -s forecastTime=-48,indicatorOfUnitOfTimeRange=h,lengthOfTimeRange=0,indicatorOfUnitForTimeRange=h $fn $temp
grib_check_key_equals $temp "-p stepRange" "-48"
#### CHECK: check optimal units are set correctly in GRIB files
fn="${data_dir}/reduced_gaussian_sub_area.grib2"