From 7c79666254a51b37c56587d43bbef0a83459fba5 Mon Sep 17 00:00:00 2001 From: Pedro Maciel Date: Fri, 22 Nov 2024 02:18:09 +0000 Subject: [PATCH 1/4] MIR-679 Regrid unstructured to unstructured, refactor griddef format --- src/mir/CMakeLists.txt | 4 + src/mir/input/GriddefInput.cc | 106 ++++++++++++++++ src/mir/input/GriddefInput.h | 56 +++++++++ src/mir/output/GriddefOutput.cc | 119 ++++++++++++++++++ src/mir/output/GriddefOutput.h | 58 +++++++++ src/mir/repres/other/UnstructuredGrid.cc | 71 ++--------- .../interpolation=structured-bicubic.test | 7 ++ 7 files changed, 359 insertions(+), 62 deletions(-) create mode 100644 src/mir/input/GriddefInput.cc create mode 100644 src/mir/input/GriddefInput.h create mode 100644 src/mir/output/GriddefOutput.cc create mode 100644 src/mir/output/GriddefOutput.h create mode 100644 tests/assertions/interpolation=structured-bicubic.test diff --git a/src/mir/CMakeLists.txt b/src/mir/CMakeLists.txt index eff7e1629..58777e0ca 100644 --- a/src/mir/CMakeLists.txt +++ b/src/mir/CMakeLists.txt @@ -246,6 +246,8 @@ list(APPEND mir_srcs input/GribMemoryInput.h input/GribStreamInput.cc input/GribStreamInput.h + input/GriddefInput.cc + input/GriddefInput.h input/MIRInput.cc input/MIRInput.h input/MultiDimensionalGribFileInput.cc @@ -457,6 +459,8 @@ list(APPEND mir_srcs output/GribOutput.h output/GribStreamOutput.cc output/GribStreamOutput.h + output/GriddefOutput.cc + output/GriddefOutput.h output/MIROutput.cc output/MIROutput.h output/MultiDimensionalOutput.cc diff --git a/src/mir/input/GriddefInput.cc b/src/mir/input/GriddefInput.cc new file mode 100644 index 000000000..e5d764a0e --- /dev/null +++ b/src/mir/input/GriddefInput.cc @@ -0,0 +1,106 @@ +/* + * (C) Copyright 1996- ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities + * granted to it by virtue of its status as an intergovernmental organisation nor + * does it submit to any jurisdiction. + */ + + +#include "mir/input/GriddefInput.h" + +#include +#include +#include +#include "eckit/filesystem/PathName.h" +#include "eckit/serialisation/IfstreamStream.h" + +#include "mir/data/MIRField.h" +#include "mir/repres/other/UnstructuredGrid.h" +#include "mir/util/Exceptions.h" +#include "mir/util/Log.h" + + +namespace mir::input { + + +GriddefInput::GriddefInput(const eckit::PathName& path) : calls_(0) { + load(path, latitudes_, longitudes_); + ASSERT(latitudes_.size() == longitudes_.size()); + ASSERT(!latitudes_.empty()); +} + + +void GriddefInput::load(const eckit::PathName& path, std::vector& latitudes, std::vector& longitudes) { + Log::info() << "GriddefInput::load '" << path << "'" << std::endl; + + std::ifstream in(path.asString().c_str()); + if (!in) { + throw exception::CantOpenFile(path); + } + + if (std::isprint(in.peek()) == 0) { + // binary + eckit::IfstreamStream s(in); + + size_t version = 0; + s >> version; + ASSERT(version == 1); + + size_t count = 0; + s >> count; + + latitudes.resize(count); + longitudes.resize(count); + + for (size_t i = 0; i < count; ++i) { + s >> latitudes[i]; + s >> longitudes[i]; + } + } + else { + double lat = 0; + double lon = 0; + while (in >> lat >> lon) { + latitudes.push_back(lat); + longitudes.push_back(lon); + } + } +} + + +bool GriddefInput::next() { + return calls_++ == 0; +} + + +size_t GriddefInput::dimensions() const { + return 1; +} + + +const param::MIRParametrisation& GriddefInput::parametrisation(size_t which) const { + ASSERT(which == 0); + return empty_; +} + + +data::MIRField GriddefInput::field() const { + return {new repres::other::UnstructuredGrid{latitudes_, longitudes_}}; +} + + +bool GriddefInput::sameAs(const MIRInput&) const { + return false; +} + + +void GriddefInput::print(std::ostream& out) const { + out << "GriddefInput[size=" << latitudes_.size() << "]"; +} + + +} // namespace mir::input diff --git a/src/mir/input/GriddefInput.h b/src/mir/input/GriddefInput.h new file mode 100644 index 000000000..3c54253bf --- /dev/null +++ b/src/mir/input/GriddefInput.h @@ -0,0 +1,56 @@ +/* + * (C) Copyright 1996- ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities + * granted to it by virtue of its status as an intergovernmental organisation nor + * does it submit to any jurisdiction. + */ + + +#pragma once + +#include + +#include "mir/input/MIRInput.h" +#include "mir/param/SimpleParametrisation.h" + + +namespace eckit { +class PathName; +} + + +namespace mir::input { + + +class GriddefInput final : public MIRInput { +public: + GriddefInput(const eckit::PathName&); + + static void load(const eckit::PathName&, std::vector& latitudes, std::vector& longitudes); + +private: + std::vector latitudes_; + std::vector longitudes_; + size_t calls_; + + const param::SimpleParametrisation empty_; + + bool next() override; + size_t dimensions() const override; + const param::MIRParametrisation& parametrisation(size_t which = 0) const override; + data::MIRField field() const override; + bool sameAs(const MIRInput&) const override; + void print(std::ostream&) const override; + + friend std::ostream& operator<<(std::ostream& s, const GriddefInput& p) { + p.print(s); + return s; + } +}; + + +} // namespace mir::input diff --git a/src/mir/output/GriddefOutput.cc b/src/mir/output/GriddefOutput.cc new file mode 100644 index 000000000..55b0dccb5 --- /dev/null +++ b/src/mir/output/GriddefOutput.cc @@ -0,0 +1,119 @@ +/* + * (C) Copyright 1996- ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities + * granted to it by virtue of its status as an intergovernmental organisation nor + * does it submit to any jurisdiction. + */ + + +#include "mir/output/GriddefOutput.h" + +#include +#include +#include + +#include "eckit/filesystem/PathName.h" +#include "eckit/serialisation/FileStream.h" + +#include "mir/action/context/Context.h" +#include "mir/data/MIRField.h" +#include "mir/repres/Iterator.h" +#include "mir/repres/Representation.h" + + +namespace mir::output { + + +GriddefOutput::GriddefOutput(std::string path, bool binary) : path_(std::move(path)), binary_(binary) {} + + +void GriddefOutput::save(const eckit::PathName& path, const std::vector& latitudes, + const std::vector& longitudes, bool binary) { + ASSERT(latitudes.size() == longitudes.size()); + const auto count = latitudes.size(); + + if (binary) { + eckit::FileStream s(path, "w"); + s << static_cast(1); // version + s << static_cast(count); + + for (size_t i = 0; i < count; ++i) { + s << latitudes[i]; + s << longitudes[i]; + } + + s.close(); + } + else { + std::ofstream out(path.asString().c_str()); + std::fixed(out).precision(6); // dot + 6 digits + + for (size_t i = 0; i < count; ++i) { + out << latitudes[i] << ' ' << longitudes[i] << '\n'; + } + } +} + + +size_t GriddefOutput::save(const param::MIRParametrisation& param, context::Context& ctx) { + const auto& field = ctx.field(); + repres::RepresentationHandle repres{field.representation()}; + + if (binary_) { + eckit::FileStream s(path_, "w"); + s << static_cast(1); // version + s << static_cast(repres->numberOfPoints()); + + for (std::unique_ptr it{repres->iterator()}; it->next();) { + const auto& p = **it; + s << p[0]; // latitude + s << p[1]; // longitude + } + + s.close(); + } + else { + std::ofstream out(path_.c_str()); + std::fixed(out).precision(6); // dot + 6 digits + + for (std::unique_ptr it{repres->iterator()}; it->next();) { + const auto& p = **it; + out << p[0] << ' ' << p[1] << '\n'; + } + } + + return 1; +} + + +bool GriddefOutput::sameAs(const MIROutput& other) const { + const auto* o = dynamic_cast(&other); + return (o != nullptr) && eckit::PathName(path_) == eckit::PathName(o->path_); +} + + +bool GriddefOutput::sameParametrisation(const param::MIRParametrisation& /*unused*/, + const param::MIRParametrisation& /*unused*/) const { + return false; +} + + +bool GriddefOutput::printParametrisation(std::ostream& /*unused*/, const param::MIRParametrisation& /*unused*/) const { + return false; +} + + +void GriddefOutput::print(std::ostream& out) const { + out << "GriddefOutput[path=" << path_ << ",binary=" << binary_ << "]"; +} + + +static const MIROutputBuilder _output1("griddef"); +static const MIROutputBuilder _output2("griddef-text"); + + +} // namespace mir::output diff --git a/src/mir/output/GriddefOutput.h b/src/mir/output/GriddefOutput.h new file mode 100644 index 000000000..78f24b7c4 --- /dev/null +++ b/src/mir/output/GriddefOutput.h @@ -0,0 +1,58 @@ +/* + * (C) Copyright 1996- ECMWF. + * + * This software is licensed under the terms of the Apache Licence Version 2.0 + * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + * + * In applying this licence, ECMWF does not waive the privileges and immunities + * granted to it by virtue of its status as an intergovernmental organisation nor + * does it submit to any jurisdiction. + */ + + +#pragma once + +#include "mir/output/MIROutput.h" + + +namespace eckit { +class PathName; +} + + +namespace mir::output { + + +class GriddefOutput : public MIROutput { +public: + static void save(const eckit::PathName&, const std::vector& latitudes, + const std::vector& longitudes, bool binary = true); + +protected: + GriddefOutput(std::string path, bool binary); + +private: + const std::string path_; + const bool binary_; + + size_t save(const param::MIRParametrisation&, context::Context&) override; + bool sameAs(const MIROutput&) const override; + bool sameParametrisation(const param::MIRParametrisation&, const param::MIRParametrisation&) const override; + bool printParametrisation(std::ostream&, const param::MIRParametrisation&) const override; + void print(std::ostream&) const override; +}; + + +class GriddefTextOutput : public GriddefOutput { +public: + GriddefTextOutput(std::string path) : GriddefOutput(path, false) {} +}; + + +class GriddefBinaryOutput : public GriddefOutput { +public: + GriddefBinaryOutput(std::string path) : GriddefOutput(path, true) {} +}; + + +} // namespace mir::output diff --git a/src/mir/repres/other/UnstructuredGrid.cc b/src/mir/repres/other/UnstructuredGrid.cc index ea149984b..9384c81f0 100644 --- a/src/mir/repres/other/UnstructuredGrid.cc +++ b/src/mir/repres/other/UnstructuredGrid.cc @@ -12,21 +12,19 @@ #include "mir/repres/other/UnstructuredGrid.h" -#include #include #include #include #include #include -#include "eckit/filesystem/PathName.h" -#include "eckit/serialisation/FileStream.h" -#include "eckit/serialisation/IfstreamStream.h" #include "eckit/utils/MD5.h" #include "mir/api/MIRJob.h" #include "mir/api/mir_config.h" +#include "mir/input/GriddefInput.h" #include "mir/iterator/UnstructuredIterator.h" +#include "mir/output/GriddefOutput.h" #include "mir/param/MIRParametrisation.h" #include "mir/util/CheckDuplicatePoints.h" #include "mir/util/Domain.h" @@ -62,12 +60,13 @@ Representation* RepresentationBuilder::make(const param namespace other { + UnstructuredGrid::UnstructuredGrid(const param::MIRParametrisation& parametrisation) { parametrisation.get("latitudes", latitudes_); parametrisation.get("longitudes", longitudes_); if (latitudes_.size() != longitudes_.size()) { - throw exception::UserError("UnstructuredGrid: requires 'latitudes' and 'longitudes' with the same size"); + throw exception::UserError("UnstructuredGrid: requires 'latitudes'/'longitudes' with the same size"); } if (latitudes_.empty()) { @@ -75,7 +74,7 @@ UnstructuredGrid::UnstructuredGrid(const param::MIRParametrisation& parametrisat parametrisation.get("numberOfPoints", numberOfPoints); if (numberOfPoints == 0) { - throw exception::UserError("UnstructuredGrid: requires 'latitudes' and 'longitudes', or 'numberOfPoints'"); + throw exception::UserError("UnstructuredGrid: requires 'latitudes'/'longitudes' or 'numberOfPoints'"); } // coordinates are unusable but unique @@ -89,68 +88,16 @@ UnstructuredGrid::UnstructuredGrid(const param::MIRParametrisation& parametrisat UnstructuredGrid::UnstructuredGrid(const eckit::PathName& path) { - std::ifstream in(path.asString().c_str()); - if (!in) { - throw exception::CantOpenFile(path); - } - - if (::isprint(in.peek()) == 0) { - - Log::info() << "UnstructuredGrid::load " << path << std::endl; - - eckit::IfstreamStream s(in); - size_t version = 0; - s >> version; - ASSERT(version == 1); - - size_t count = 0; - s >> count; - - latitudes_.resize(count); - longitudes_.resize(count); - - for (size_t i = 0; i < count; ++i) { - s >> latitudes_[i]; - s >> longitudes_[i]; - // Log::info() << latitudes_[i] << " " << longitudes_[i] << std::endl; - } - } - else { - double lat = 0; - double lon = 0; - while (in >> lat >> lon) { - latitudes_.push_back(lat); - longitudes_.push_back(lon); - } - } - + input::GriddefInput::load(path, latitudes_, longitudes_); util::check_duplicate_points("UnstructuredGrid from " + path.asString(), latitudes_, longitudes_); } void UnstructuredGrid::save(const eckit::PathName& path, const std::vector& latitudes, const std::vector& longitudes, bool binary) { - Log::info() << "UnstructuredGrid::save " << path << std::endl; - util::check_duplicate_points("UnstructuredGrid::save to " + path.asString(), latitudes, longitudes); - - if (binary) { - eckit::FileStream s(path, "w"); - size_t version = 1; - size_t count = latitudes.size(); - s << version; - s << count; - for (size_t i = 0; i < count; ++i) { - s << latitudes[i]; - s << longitudes[i]; - - Log::info() << latitudes[i] << " " << longitudes[i] << std::endl; - } - s.close(); - } - else { - NOTIMP; - } + ASSERT(binary); + output::GriddefOutput::save(path, latitudes, longitudes); } @@ -158,7 +105,7 @@ UnstructuredGrid::UnstructuredGrid(const std::vector& latitudes, const s const util::BoundingBox& bbox) : Gridded(bbox), latitudes_(latitudes), longitudes_(longitudes) { if (latitudes_.size() != longitudes_.size()) { - throw exception::UserError("UnstructuredGrid: requires 'latitudes' and 'longitudes' with the same size"); + throw exception::UserError("UnstructuredGrid: requires 'latitudes'/'longitudes' with the same size"); } util::check_duplicate_points("UnstructuredGrid from arguments", latitudes_, longitudes_); diff --git a/tests/assertions/interpolation=structured-bicubic.test b/tests/assertions/interpolation=structured-bicubic.test new file mode 100644 index 000000000..acb9397ee --- /dev/null +++ b/tests/assertions/interpolation=structured-bicubic.test @@ -0,0 +1,7 @@ +# input +regular_ll.2-2.grib2 +# mir +--interpolation=structured-bicubic --grid=1/1 +# grib_get +Ni = 360 +Nj = 181 From 2b16e8b1b87d1cc71e914bc256f11538b53d3eab Mon Sep 17 00:00:00 2001 From: Pedro Maciel Date: Fri, 22 Nov 2024 02:26:54 +0000 Subject: [PATCH 2/4] MIR-679 Regrid unstructured to unstructured, auxiliary GRIB data in any format to "latitudes"/"longitudes" and "griddef" formats --- src/mir/input/GribInput.cc | 57 +++++++++++++------------------------- src/mir/input/GribInput.h | 4 --- 2 files changed, 19 insertions(+), 42 deletions(-) diff --git a/src/mir/input/GribInput.cc b/src/mir/input/GribInput.cc index a238aa7a6..d58742c6a 100644 --- a/src/mir/input/GribInput.cc +++ b/src/mir/input/GribInput.cc @@ -26,7 +26,6 @@ #include "eckit/config/Resource.h" #include "eckit/io/Buffer.h" #include "eckit/io/MemoryHandle.h" -#include "eckit/io/StdFile.h" #include "eckit/serialisation/HandleStream.h" #include "eckit/types/FloatCompare.h" #include "eckit/types/Fraction.h" @@ -34,6 +33,8 @@ #include "mir/config/LibMir.h" #include "mir/data/MIRField.h" #include "mir/grib/Config.h" +#include "mir/input/GriddefInput.h" +#include "mir/param/DefaultParametrisation.h" #include "mir/repres/Representation.h" #include "mir/util/Exceptions.h" #include "mir/util/Grib.h" @@ -1141,52 +1142,32 @@ bool GribInput::handle(grib_handle* h) { } -void GribInput::auxilaryValues(const std::string& path, std::vector& values) const { +void GribInput::setAuxiliaryInformation(const util::ValueMap& map) { util::lock_guard lock(mutex_); - eckit::AutoStdFile f(path); - - int e; - grib_handle* h = nullptr; - - // We cannot use GribFileInput to read these files, because lat/lon files are also - // has grid_type = triangular_grid, and we will create a loop - - try { - h = codes_grib_handle_new_from_file(nullptr, f, &e); - grib_call(e, path.c_str()); - size_t count; - GRIB_CALL(codes_get_size(h, "values", &count)); - - size_t size = count; - values.resize(count); - GRIB_CALL(codes_get_double_array(h, "values", values.data(), &size)); - ASSERT(count == size); + auto load = [](const eckit::PathName& path, std::vector& values) { + Log::info() << "GribInput::setAuxiliaryInformation: '" << path << "'" << std::endl; - long missingValuesPresent; - GRIB_CALL(codes_get_long(h, "missingValuesPresent", &missingValuesPresent)); - ASSERT(!missingValuesPresent); - - codes_handle_delete(h); - } - catch (...) { - codes_handle_delete(h); - throw; - } -} + static const param::DefaultParametrisation param; + std::unique_ptr input(input::MIRInputFactory::build(path.asString(), param)); + ASSERT(input->next()); + auto field = input->field(); + ASSERT(field.dimensions() == 1); -void GribInput::setAuxiliaryInformation(const util::ValueMap& map) { - util::lock_guard lock(mutex_); + values = field.values(0); + }; for (const auto& kv : map) { - if (kv.first == "latitudes") { - Log::debug() << "Loading auxilary file '" << kv.second << "'" << std::endl; - auxilaryValues(kv.second, latitudes_); + if (kv.first == "griddef") { + GriddefInput::load(kv.second, latitudes_, longitudes_); + ASSERT(latitudes_.size() == longitudes_.size()); + } + else if (kv.first == "latitudes") { + load(kv.second, latitudes_); } else if (kv.first == "longitudes") { - Log::debug() << "Loading auxilary file '" << kv.second << "'" << std::endl; - auxilaryValues(kv.second, longitudes_); + load(kv.second, longitudes_); } } } diff --git a/src/mir/input/GribInput.h b/src/mir/input/GribInput.h index bcc19ffd5..709c1795f 100644 --- a/src/mir/input/GribInput.h +++ b/src/mir/input/GribInput.h @@ -46,10 +46,6 @@ class GribInput : public MIRInput, public param::FieldParametrisation { std::vector latitudes_; std::vector longitudes_; - // -- Methods - - void auxilaryValues(const std::string&, std::vector& values) const; - // -- Overridden methods // From MIRInput From 8585b987c1f505fdbbc283e0094b0c15097b4195 Mon Sep 17 00:00:00 2001 From: Pedro Maciel Date: Fri, 22 Nov 2024 10:27:03 +0000 Subject: [PATCH 3/4] MIR-679 Regrid unstructured to unstructured, tests --- tests/assertions/ICON.griddef | 1 + tests/assertions/MIR-679.ICON-to-WP.core.test | 7 +++++ tests/assertions/MIR-679.WP-to-ICON.core.test | 7 +++++ tests/data/ICON.griddef | Bin 0 -> 368650 bytes tests/plans/ICON.griddef | 1 + tests/plans/ICON.shortName=lsm.grib2 | 1 + tests/plans/MIR-679.ICON-to-WP.test | 6 +++++ tests/plans/MIR-679.WP-to-ICON.test | 6 +++++ tests/plans/mir-test.sh.in | 24 +++++++++++------- 9 files changed, 44 insertions(+), 9 deletions(-) create mode 120000 tests/assertions/ICON.griddef create mode 100644 tests/assertions/MIR-679.ICON-to-WP.core.test create mode 100644 tests/assertions/MIR-679.WP-to-ICON.core.test create mode 100644 tests/data/ICON.griddef create mode 120000 tests/plans/ICON.griddef create mode 120000 tests/plans/ICON.shortName=lsm.grib2 create mode 100644 tests/plans/MIR-679.ICON-to-WP.test create mode 100644 tests/plans/MIR-679.WP-to-ICON.test diff --git a/tests/assertions/ICON.griddef b/tests/assertions/ICON.griddef new file mode 120000 index 000000000..817c2a817 --- /dev/null +++ b/tests/assertions/ICON.griddef @@ -0,0 +1 @@ +../data/ICON.griddef \ No newline at end of file diff --git a/tests/assertions/MIR-679.ICON-to-WP.core.test b/tests/assertions/MIR-679.ICON-to-WP.core.test new file mode 100644 index 000000000..2e98d6bf3 --- /dev/null +++ b/tests/assertions/MIR-679.ICON-to-WP.core.test @@ -0,0 +1,7 @@ +# input +ICON.shortName=lsm.grib2 +# mir +--input={griddef:$tests_assertions_dir/ICON.griddef} --griddef=$tests_assertions_dir/weather-params.pts --format=grib +# grib_get +gridType=unstructured_grid +numberOfDataPoints=7693 diff --git a/tests/assertions/MIR-679.WP-to-ICON.core.test b/tests/assertions/MIR-679.WP-to-ICON.core.test new file mode 100644 index 000000000..8230ef894 --- /dev/null +++ b/tests/assertions/MIR-679.WP-to-ICON.core.test @@ -0,0 +1,7 @@ +# input +/dev/null +# mir +--input={artificialInput:constant,constant:0.,gridded:True,gridType:unstructured_grid,griddef:$tests_assertions_dir/weather-params.pts} --add-random=uniform-int-distribution{a:1,b:3} --griddef=$tests_assertions_dir/ICON.griddef --format=grib +# grib_get +gridType=unstructured_grid +numberOfDataPoints=20480 diff --git a/tests/data/ICON.griddef b/tests/data/ICON.griddef new file mode 100644 index 0000000000000000000000000000000000000000..ed88e80ae280317d0116eee7810fc734824fb34d GIT binary patch literal 368650 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

+|HSG(A&U%uBUW3nxs?8V5F7DHV&zXlI>Z%; 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 z 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 u|EK;1rrrwupR_xk&9RRfyVCz@daQQ8idb; mars.r.$t - $mars_script mars.r.$t || rm data.in.$t - cp data.in.$t "${tmp_plans_dir}/$m" + m=$(echo $n | tr '/' '_') + if [[ -f "${tests_plans_dir}/$m" ]] + then + ln -sf "${tests_plans_dir}/$m" data.in.$t + elif [[ -f "${tmp_plans_dir}/$m" ]] + then + ln -sf "${tmp_plans_dir}/$m" data.in.$t + else + echo "retrieve,$n,target=data.in.$t" > mars.r.$t + $mars_script mars.r.$t || rm data.in.$t + cp data.in.$t "${tmp_plans_dir}/$m" + fi fi state=mir ;; From b2a3d467030dc92bd87c2edde02bfe62bb97fdb2 Mon Sep 17 00:00:00 2001 From: Pedro Maciel Date: Fri, 22 Nov 2024 23:08:40 +0000 Subject: [PATCH 4/4] ArtificialInput support for UntructuredGrid --- src/mir/input/ArtificialInput.cc | 98 +++++++++++++++----------------- src/mir/input/ArtificialInput.h | 27 ++++----- 2 files changed, 59 insertions(+), 66 deletions(-) diff --git a/src/mir/input/ArtificialInput.cc b/src/mir/input/ArtificialInput.cc index f8d261ea6..80d34654f 100644 --- a/src/mir/input/ArtificialInput.cc +++ b/src/mir/input/ArtificialInput.cc @@ -12,9 +12,13 @@ #include "mir/input/ArtificialInput.h" -#include +#include +#include #include +#include "mir/data/MIRField.h" +#include "mir/input/GriddefInput.h" +#include "mir/param/CombinedParametrisation.h" #include "mir/param/SimpleParametrisation.h" #include "mir/util/Exceptions.h" #include "mir/util/Log.h" @@ -47,6 +51,12 @@ size_t ArtificialInput::dimensions() const { } +ArtificialInput::ArtificialInput() : + inputParametrisation_(new param::CombinedParametrisation(parametrisation_, *this, parametrisation_)), calls_(0) { + ASSERT(inputParametrisation_); +} + + param::SimpleParametrisation& ArtificialInput::parametrisation(size_t which) { ASSERT(which == 0); return parametrisation_; @@ -55,7 +65,7 @@ param::SimpleParametrisation& ArtificialInput::parametrisation(size_t which) { const param::MIRParametrisation& ArtificialInput::parametrisation(size_t which) const { ASSERT(which == 0); - return parametrisation_; + return *inputParametrisation_; } @@ -70,6 +80,7 @@ void ArtificialInput::setAuxiliaryInformation(const util::ValueMap& map) { parametrisation_.set("grid", grid); } } + if (!parametrisation_.has("rotation")) { std::vector rotation(2, 0); if (parametrisation_.get("south_pole_latitude", rotation[0]) && @@ -77,77 +88,64 @@ void ArtificialInput::setAuxiliaryInformation(const util::ValueMap& map) { parametrisation_.set("rotation", rotation); } } -} + auto load = [](const eckit::PathName& path, std::vector& values) { + Log::info() << "ArtificialInput::setAuxiliaryInformation: '" << path << "'" << std::endl; -void ArtificialInput::print(std::ostream& out) const { - out << "ArtificialInput[parametrisation=" << parametrisation_ << "]"; -} + static const param::SimpleParametrisation empty; + std::unique_ptr input(input::MIRInputFactory::build(path.asString(), empty)); + ASSERT(input->next()); + auto field = input->field(); + ASSERT(field.dimensions() == 1); -bool ArtificialInput::sameAs(const MIRInput& other) const { - const auto* o = dynamic_cast(&other); - return (o != nullptr) && parametrisation_.matchAll(o->parametrisation_); -} + values = field.values(0); + }; + if (std::string path; parametrisation_.get("griddef", path)) { + GriddefInput::load(path, latitudes_, longitudes_); + } -bool ArtificialInput::has(const std::string& name) const { - return parametrisation_.has(name) || FieldParametrisation::has(name); -} + if (std::string lats, lons; parametrisation_.get("latitudes", lats) && parametrisation_.get("longitudes", lons)) { + load(lats, latitudes_); + load(lons, longitudes_); + } + ASSERT(latitudes_.size() == longitudes_.size()); + if (!parametrisation_.has("numberOfDataPoints")) { + parametrisation_.set("numberOfDataPoints", latitudes_.size()); + } -bool ArtificialInput::get(const std::string& name, std::string& value) const { - return parametrisation_.get(name, value) || FieldParametrisation::get(name, value); + if (!parametrisation_.has("paramId")) { + parametrisation_.set("paramId", 255L /*missing*/); + } } -bool ArtificialInput::get(const std::string& name, bool& value) const { - return parametrisation_.get(name, value) || FieldParametrisation::get(name, value); +void ArtificialInput::print(std::ostream& out) const { + out << "ArtificialInput[parametrisation=" << parametrisation_ << "]"; } -bool ArtificialInput::get(const std::string& name, int& value) const { - return parametrisation_.get(name, value) || FieldParametrisation::get(name, value); +bool ArtificialInput::sameAs(const MIRInput& other) const { + const auto* o = dynamic_cast(&other); + return (o != nullptr) && parametrisation_.matchAll(o->parametrisation_); } bool ArtificialInput::get(const std::string& name, long& value) const { - return parametrisation_.get(name, value) || FieldParametrisation::get(name, value); -} - - -bool ArtificialInput::get(const std::string& name, float& value) const { - return parametrisation_.get(name, value) || FieldParametrisation::get(name, value); + static const std::string PARAM_ID("paramId"); + return name == PARAM_ID ? parametrisation_.get(name, value) : FieldParametrisation::get(name, value); } -bool ArtificialInput::get(const std::string& name, double& value) const { - return parametrisation_.get(name, value) || FieldParametrisation::get(name, value); +void ArtificialInput::latitudes(std::vector& values) const { + values = latitudes_; } -bool ArtificialInput::get(const std::string& name, std::vector& value) const { - return parametrisation_.get(name, value) || FieldParametrisation::get(name, value); -} - - -bool ArtificialInput::get(const std::string& name, std::vector& value) const { - return parametrisation_.get(name, value) || FieldParametrisation::get(name, value); -} - - -bool ArtificialInput::get(const std::string& name, std::vector& value) const { - return parametrisation_.get(name, value) || FieldParametrisation::get(name, value); -} - - -bool ArtificialInput::get(const std::string& name, std::vector& value) const { - return parametrisation_.get(name, value) || FieldParametrisation::get(name, value); -} - - -bool ArtificialInput::get(const std::string& name, std::vector& value) const { - return parametrisation_.get(name, value) || FieldParametrisation::get(name, value); +void ArtificialInput::longitudes(std::vector& values) const { + values = longitudes_; } @@ -175,8 +173,6 @@ ArtificialInput* ArtificialInputFactory::build(const std::string& name, const pa util::call_once(once, init); util::lock_guard lock(*local_mutex); - // Log::debug() << "ArtificialInputFactory: looking for '" << name << "'" << std::endl; - auto j = m->find(name); if (j == m->end()) { list(Log::error() << "ArtificialInputFactory: unknown '" << name << "', choices are: "); diff --git a/src/mir/input/ArtificialInput.h b/src/mir/input/ArtificialInput.h index 16e404091..2960198bd 100644 --- a/src/mir/input/ArtificialInput.h +++ b/src/mir/input/ArtificialInput.h @@ -12,6 +12,8 @@ #pragma once +#include + #include "mir/input/MIRInput.h" #include "mir/param/FieldParametrisation.h" #include "mir/param/SimpleParametrisation.h" @@ -54,7 +56,7 @@ class ArtificialInput : public MIRInput, protected param::FieldParametrisation { protected: // -- Constructors - ArtificialInput() : calls_(0) {} + ArtificialInput(); // -- Members // None @@ -74,20 +76,7 @@ class ArtificialInput : public MIRInput, protected param::FieldParametrisation { bool sameAs(const MIRInput&) const override; // From FieldParametrisation - bool has(const std::string& name) const override; - - bool get(const std::string& name, std::string& value) const override; - bool get(const std::string& name, bool& value) const override; - bool get(const std::string& name, int& value) const override; bool get(const std::string& name, long& value) const override; - bool get(const std::string& name, float& value) const override; - bool get(const std::string& name, double& value) const override; - - bool get(const std::string& name, std::vector& value) const override; - bool get(const std::string& name, std::vector& value) const override; - bool get(const std::string& name, std::vector& value) const override; - bool get(const std::string& name, std::vector& value) const override; - bool get(const std::string& name, std::vector& value) const override; // -- Class members // None @@ -99,13 +88,21 @@ class ArtificialInput : public MIRInput, protected param::FieldParametrisation { // -- Members param::SimpleParametrisation parametrisation_; + std::unique_ptr inputParametrisation_; size_t calls_; + // For unstructured grids + std::vector latitudes_; + std::vector longitudes_; + // -- Methods // None // -- Overridden methods - // None + + // From FieldParametrisation + void latitudes(std::vector&) const override; + void longitudes(std::vector&) const override; // -- Class members // None