Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 15 additions & 2 deletions src/multio/action/interpolate/Interpolate.cc
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,15 @@ std::string generateKey(const message::Message& msg, const std::string& cache_pa

} // namespace


Interpolate::Interpolate(const ComponentConfiguration& compConf) :
ChainedAction(compConf),
additionalMetadata_{message::toMetadata(
compConf.parsedConfig().has("additional-metadata")
? eckit::LocalConfiguration{compConf.parsedConfig().getSubConfiguration("additional-metadata")}
: eckit::LocalConfiguration{})} {}


void fill_out_metadata(const message::Metadata& in_md, message::Metadata& out_md) {
for (const auto& kv : in_md) {
if (std::find(metadata_black_list.cbegin(), metadata_black_list.cend(), kv.first)
Expand All @@ -182,6 +191,7 @@ void fill_out_metadata(const message::Metadata& in_md, message::Metadata& out_md
}
};


message::MetadataValue getInputGrid(const eckit::LocalConfiguration& cfg, message::Metadata& md) {
auto searchAtlasGridKind = md.find("atlas-grid-kind");
if (searchAtlasGridKind != md.end()) { // metadata has always precedence
Expand Down Expand Up @@ -402,7 +412,8 @@ void fill_job(const eckit::LocalConfiguration& cfg, mir::param::SimpleParametris
}
const auto& options = cfg.getSubConfiguration("options");
const auto cache_path = cfg.getString("cache-path", "");
const auto weights_file = generateKey<double>(msg, cache_path, grid[0], gridKind == "HEALPix_nested" ? "nested" : "ring");
const auto weights_file
= generateKey<double>(msg, cache_path, grid[0], gridKind == "HEALPix_nested" ? "nested" : "ring");
destination.set("interpolation-matrix", weights_file);
}
}
Expand All @@ -425,14 +436,16 @@ message::Message Interpolate::InterpolateMessage<double>(message::Message&& msg)

message::Metadata md;
fill_out_metadata(msg.metadata(), md);
md.updateOverwrite(additionalMetadata_);
md.set(dm::legacy::Precision, "double");

mir::param::SimpleParametrisation inputPar;
auto inp = getInputGrid(config, md);
fill_input(config, inputPar, size, msg.metadata().getOpt<std::string>(dm::legacy::Domain).value_or(""), inp);
auto searchMissingValue = msg.metadata().find("missingValue");
auto searchBitmapPresent = msg.metadata().find("bitmapPresent");
if (searchMissingValue != msg.metadata().end() && searchBitmapPresent != msg.metadata().end() && searchBitmapPresent->second.get<bool>()) {
if (searchMissingValue != msg.metadata().end() && searchBitmapPresent != msg.metadata().end()
&& searchBitmapPresent->second.get<bool>()) {
inputPar.set("missing_value", searchMissingValue->second.get<double>());
}
else if (config.getSubConfiguration("options").has("missing_value")) {
Expand Down
4 changes: 3 additions & 1 deletion src/multio/action/interpolate/Interpolate.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,16 @@ namespace multio::action::interpolate {
*/
class Interpolate final : public ChainedAction {
public:
using ChainedAction::ChainedAction;
explicit Interpolate(const ComponentConfiguration& compConf);

private:
template <typename T>
message::Message InterpolateMessage(message::Message&&) const;

void print(std::ostream&) const override;
void executeImpl(message::Message) override;

message::Metadata additionalMetadata_;
};


Expand Down
Loading