Skip to content

Commit c39c248

Browse files
committed
Merge branch 'feature/MIR-677' into develop
2 parents d29ec1f + 3334166 commit c39c248

File tree

4 files changed

+36
-1
lines changed

4 files changed

+36
-1
lines changed

src/mir/key/style/ECMWFStyle.cc

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,10 @@
2424
#include "mir/key/grid/Grid.h"
2525
#include "mir/key/resol/Resol.h"
2626
#include "mir/output/MIROutput.h"
27+
#include "mir/param/CombinedParametrisation.h"
28+
#include "mir/param/DefaultParametrisation.h"
2729
#include "mir/param/MIRParametrisation.h"
30+
#include "mir/param/RuntimeParametrisation.h"
2831
#include "mir/param/SameParametrisation.h"
2932
#include "mir/repres/latlon/LatLon.h"
3033
#include "mir/util/BoundingBox.h"
@@ -333,7 +336,8 @@ void ECMWFStyle::sh2sh(action::ActionPlan& plan) const {
333336

334337

335338
void ECMWFStyle::grid2grid(action::ActionPlan& plan) const {
336-
const auto& user = parametrisation_.userParametrisation();
339+
const auto& user = parametrisation_.userParametrisation();
340+
const auto& field = parametrisation_.fieldParametrisation();
337341

338342
bool rotation = user.has("rotation");
339343
bool vod2uv = option(user, "vod2uv", false);
@@ -346,6 +350,21 @@ void ECMWFStyle::grid2grid(action::ActionPlan& plan) const {
346350

347351
add_formula(plan, user, {"gridded", "raw"});
348352

353+
if (std::string intint; user.get("intermediate-interpolation", intint) && !intint.empty()) {
354+
if (std::string intgrid; user.get("intgrid", intgrid) && !intgrid.empty()) {
355+
auto runtime = new param::RuntimeParametrisation{parametrisation_};
356+
runtime->set("interpolation", intint);
357+
runtime->set("grid", intgrid);
358+
runtime->unset("rotation");
359+
360+
static param::DefaultParametrisation defaults;
361+
auto recombined = std::make_unique<param::CombinedParametrisation>(*runtime, field, defaults);
362+
auto target = target_gridded_from_parametrisation(*recombined, false);
363+
364+
plan.add("interpolate.grid2" + target, runtime);
365+
}
366+
}
367+
349368
auto target = target_gridded_from_parametrisation(parametrisation_, rotation);
350369
if (!target.empty()) {
351370
plan.add("interpolate.grid2" + target);

src/tools/mir.cc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,9 @@ struct MIR : MIRTool {
115115
options_.push_back(
116116
new FactoryOption<method::MethodFactory>("interpolation", "Grid to grid interpolation method"));
117117

118+
options_.push_back(new FactoryOption<method::MethodFactory>("intermediate-interpolation",
119+
"Grid to grid intermediate interpolation method"));
120+
118121
options_.push_back(
119122
new FactoryOption<stats::FieldFactory>("interpolation-statistics", "Statistics interpolation method"));
120123

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# input
2+
regular_ll.2-2.grib2
3+
# mir
4+
--intermediate-interpolation=nn --intgrid=O80 --interpolation=linear --grid=1/1
5+
# grib_get
6+
Ni=360
7+
Nj=181
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# input
2+
regular_ll.2-2.grib2
3+
# mir
4+
--intermediate-interpolation=nn --intgrid=O80 --interpolation=linear --grid=1/1
5+
# plan
6+
Gridded2NamedGrid[grid=O80,interpolation=nn,method=KNearestNeighbours[nonLinear[MissingIfHeaviestMissing[]],solver=Multiply[],cropping=none,lsmWeightAdjustment=0.2,pruneEpsilon=1e-10,poleDisplacement=0,nearestMethod=NearestNeighbourWithLowestIndex[nclosest=4],distanceWeighting=InverseDistanceWeightingSquared[]]]|Gridded2RegularLL[increments=Increments[west_east=1,south_north=1],bbox=BoundingBox[north=90,west=0,south=-90,east=359],interpolation=linear,method=FiniteElement[name=linear,nonLinear[MissingIfHeaviestMissing[]],solver=Multiply[],cropping=none,lsmWeightAdjustment=0.2,pruneEpsilon=1e-10,poleDisplacement=0,validateMesh=0,projectionFail=missing-value]]|Save[output=...]

0 commit comments

Comments
 (0)