5 #include <boost/geometry.hpp> 6 #include <boost/geometry/geometries/point.hpp> 7 #include <boost/geometry/geometries/box.hpp> 8 #include <boost/geometry/index/rtree.hpp> 13 #define GRIDPP_VERSION "0.4.2" 14 #define __version__ GRIDPP_VERSION 17 typedef std::vector<float>
vec;
18 typedef std::vector<vec>
vec2;
19 typedef std::vector<vec2>
vec3;
20 typedef std::vector<int>
ivec;
21 typedef std::vector<ivec>
ivec2;
24 typedef std::vector<double>
dvec;
25 typedef std::vector<dvec>
dvec2;
29 static const float MV = NAN;
31 static const float pi = 3.14159265;
85 const vec2& background,
89 const vec& pbackground,
94 const vec2& background,
99 const vec& pbackground,
117 const vec2& pbackground,
315 float pressure(
float ielev,
float oelev,
float ipressure,
float itemperature=288.15);
342 void debug(std::string
string);
343 void warning(std::string
string);
344 void error(std::string
string);
373 float interpolate(
float x,
const std::vector<float>& iX,
const std::vector<float>& iY);
426 virtual float corr(
const Point& p1,
const Point& p2)
const = 0;
430 float localization_distance()
const;
433 float barnes_rho(
float dist,
float length)
const;
434 float cressman_rho(
float dist,
float length)
const;
441 float corr(
const Point& p1,
const Point& p2)
const;
453 float corr(
const Point& p1,
const Point& p2)
const;
463 float corr(
const Point& p1,
const Point& p2)
const;
472 virtual float forward(
float value)
const = 0;
473 virtual float backward(
float value)
const = 0;
474 virtual vec2 forward(
const vec2& input)
const;
475 virtual vec2 backward(
const vec2& input)
const;
479 float forward(
float value)
const;
480 float backward(
float value)
const;
484 float forward(
float value)
const;
485 float backward(
float value)
const;
490 float forward(
float value)
const;
491 float backward(
float value)
const;
508 int get_nearest_neighbour(
float lat,
float lon)
const;
515 ivec get_neighbours(
float lat,
float lon,
float radius)
const;
523 ivec get_neighbours_with_distance(
float lat,
float lon,
float radius,
vec& distances)
const;
530 int get_num_neighbours(
float lat,
float lon,
float radius)
const;
537 ivec get_closest_neighbours(
float lat,
float lon,
int num)
const;
547 static bool convert_coordinates(
const vec& lats,
const vec& lons,
vec& x_coords,
vec& y_coords,
vec& z_coords);
556 static bool convert_coordinates(
float lat,
float lon,
float& x_coord,
float& y_coord,
float& z_coord);
557 static float deg2rad(
float deg);
558 static float rad2deg(
float deg);
559 static float calc_distance(
float lat1,
float lon1,
float lat2,
float lon2);
560 static float calc_distance(
float x0,
float y0,
float z0,
float x1,
float y1,
float z1);
561 static float calc_distance_fast(
float lat1,
float lon1,
float lat2,
float lon2);
562 vec get_lats()
const;
563 vec get_lons()
const;
566 typedef boost::geometry::model::point<float, 3, boost::geometry::cs::cartesian>
point;
567 typedef std::pair<point, unsigned>
value;
568 typedef boost::geometry::model::box<point>
box;
569 boost::geometry::index::rtree< value, boost::geometry::index::quadratic<16> >
mTree;
581 int get_nearest_neighbour(
float lat,
float lon)
const;
582 ivec get_neighbours(
float lat,
float lon,
float radius)
const;
583 ivec get_neighbours_with_distance(
float lat,
float lon,
float radius,
vec& distances)
const;
584 int get_num_neighbours(
float lat,
float lon,
float radius)
const;
585 ivec get_closest_neighbours(
float lat,
float lon,
int num)
const;
587 vec get_lats()
const;
588 vec get_lons()
const;
589 vec get_elevs()
const;
590 vec get_lafs()
const;
592 ivec get_in_domain_indices(
const Grid& grid)
const;
607 ivec get_nearest_neighbour(
float lat,
float lon)
const;
608 ivec2 get_neighbours(
float lat,
float lon,
float radius)
const;
609 ivec2 get_neighbours_with_distance(
float lat,
float lon,
float radius,
vec& distances)
const;
610 int get_num_neighbours(
float lat,
float lon,
float radius)
const;
611 ivec2 get_closest_neighbours(
float lat,
float lon,
int num)
const;
613 vec2 get_lats()
const;
614 vec2 get_lons()
const;
615 vec2 get_elevs()
const;
616 vec2 get_lafs()
const;
622 ivec get_indices(
int index)
const;
int test_ivec_input(const ivec &input)
Testing function for 1D input vector.
Definition: util.cpp:315
std::string version()
The gridpp version.
Definition: gridpp.cpp:6
vec2 neighbourhood_quantile_ens_fast(const vec3 &input, float quantile, int radius, const vec &thresholds)
Approximate neighbourhood filter space and across members for quantile operation. ...
Definition: neighbourhood.cpp:371
float laf
Definition: gridpp.h:419
static const float MV_CML
Definition: gridpp.h:30
Helper class for Grid and Points.
Definition: gridpp.h:497
Minimum of values.
Definition: gridpp.h:52
float dewpoint(float temperature, float relative_humidity)
Calculate dewpoint temperature from temperature and relative humidity.
Definition: humidity.cpp:3
Maximum of values.
Definition: gridpp.h:54
vec2 optimal_interpolation_transform(const gridpp::Grid &bgrid, const vec2 &background, float bsigma, const gridpp::Points &points, const vec &pobs, const vec &psigma, const vec &pbackground, const gridpp::StructureFunction &structure, int max_points, const gridpp::Transform &transform)
Definition: oi.cpp:193
ivec2 test_ivec2_output()
Definition: util.cpp:365
float wind_speed(float xwind, float ywind)
Diagnose wind speed from its components.
Definition: wind.cpp:4
ivec test_ivec_output()
Testing function for 1D output vector.
Definition: util.cpp:361
vec2 optimal_interpolation(const gridpp::Grid &bgrid, const vec2 &background, const gridpp::Points &points, const vec &pobs, const vec &pratios, const vec &pbackground, const gridpp::StructureFunction &structure, int max_points)
Optimal interpolation for a deterministic field.
Definition: oi.cpp:24
Unknown statistic.
Definition: gridpp.h:59
vec2 init_vec2(int Y, int X, float value=gridpp::MV)
Initialize a vector of size Y, X, with a given value.
Definition: util.cpp:297
std::vector< dvec > dvec2
Definition: gridpp.h:25
Simple structure function based on distance, elevation, and land area fraction.
Definition: gridpp.h:438
Extrapolation
Methods for extrapolating outside a curve.
Definition: gridpp.h:42
static double radius_earth
Definition: gridpp.h:32
Population variance of values.
Definition: gridpp.h:57
void set_omp_threads(int num)
Set the number of OpenMP threads to use.
Definition: gridpp.cpp:49
float relative_humidity(float temperature, float dewpoint)
Calculate relative humidity from temperature and dewpoint temperature.
Definition: humidity.cpp:30
vec2 nearest(const Grid &igrid, const Grid &ogrid, const vec2 ivalues)
Nearest neighbour dowscaling grid to grid.
Definition: nearest.cpp:4
Statistic get_statistic(std::string name)
Convert name of a statistic enum.
Definition: gridpp.cpp:9
boost::geometry::model::point< float, 3, boost::geometry::cs::cartesian > point
Definition: gridpp.h:566
vec2 fill(const Grid &igrid, const vec2 &input, const Points &points, const vec &radii, float value, bool outside)
Fill in values inside or outside a set of circles.
Definition: fill.cpp:3
float calc_statistic(const vec &array, Statistic statistic)
Definition: util.cpp:21
Represents a vector of locations and their metadata.
Definition: gridpp.h:575
std::pair< point, unsigned > value
Definition: gridpp.h:567
void not_implemented_error()
Definition: util.cpp:288
vec2 simple_gradient(const Grid &igrid, const Grid &ogrid, const vec2 ivalues, float elev_gradient)
Definition: simple_gradient.cpp:22
vec2 bilinear(const Grid &igrid, const Grid &ogrid, const vec2 ivalues)
Bilinear downscaling grid to grid.
Definition: bilinear.cpp:10
Represents a 2D grid of locations and their metadata.
Definition: gridpp.h:603
Simple structure function based on distance, elevation, and land area fraction.
Definition: gridpp.h:450
Covariance structure function.
Definition: gridpp.h:422
Continue past the end-points using the mean slope of the curve.
Definition: gridpp.h:44
void initialize_omp()
Sets the number of OpenMP threads to 1 if OMP_NUM_THREADS undefined.
Definition: gridpp.cpp:37
int get_lower_index(float iX, const std::vector< float > &iValues)
Find the index in a vector that is equal or just below a value.
Definition: util.cpp:222
Continue past the end-points using the slope of the two lowermost or uppermost points in the curve...
Definition: gridpp.h:45
vec2 quantile_mapping(const vec2 &input, const vec &x, const vec &y, gridpp::Extrapolation policy)
Quantile mapping of 2D grid using a constant quantile map.
Definition: quantile_mapping.cpp:7
boost::geometry::model::box< point > box
Definition: gridpp.h:568
float test_vec_input(const vec &input)
Testing function for 1D input vector.
Definition: util.cpp:309
vec2 neighbourhood_quantile_fast(const vec2 &input, float quantile, int radius, const vec &thresholds)
Approximate spatial neighbourhood filter for quantile operation.
Definition: neighbourhood.cpp:291
vec2 neighbourhood_brute_force(const vec2 &input, int radius, Statistic statistic)
Spatial neighbourhood filter without any shortcuts.
Definition: neighbourhood.cpp:456
bool compatible_size(const Grid &grid, const vec2 &v)
Check if the grid is the same size as the 2D vector.
Definition: util.cpp:291
std::vector< int > ivec
Definition: gridpp.h:20
vec mLats
Definition: gridpp.h:570
float wetbulb(float temperature, float pressure, float relative_humidity)
Calculate wetbulb temperature from temperature, pressure, and relative humidity.
Definition: humidity.cpp:77
float lon
Definition: gridpp.h:417
Mean of values.
Definition: gridpp.h:53
vec2 neighbourhood_quantile_ens(const vec3 &input, float quantile, int radius)
Neighbourhood filter in space and across ensemble members.
Definition: neighbourhood.cpp:462
Statistic
Statistical operations to reduce a vector to a scalar.
Definition: gridpp.h:50
void debug(std::string string)
Definition: util.cpp:147
vec mLons
Definition: gridpp.h:571
A quantile from values.
Definition: gridpp.h:55
float elev
Definition: gridpp.h:418
vec3 optimal_interpolation_ensi(const gridpp::Grid &bgrid, const vec3 &input, const gridpp::Points &points, const vec &pobs, const vec &psigmas, const vec2 &pbackground, const gridpp::StructureFunction &structure, int max_points)
Optimal interpolation using a structure function based on an ensemble See Lussana et al 2019 (DOI: 10...
Definition: oi_ensi.cpp:31
vec2 neighbourhood_ens(const vec3 &input, int radius, Statistic statistic)
Neighbourhood filter in space and across ensemble members.
Definition: neighbourhood.cpp:10
static const float pi
Definition: gridpp.h:31
int num_missing_values(const vec2 &iArray)
Definition: util.cpp:138
std::vector< double > dvec
Definition: gridpp.h:24
std::vector< vec2 > vec3
Definition: gridpp.h:19
KDTree()
Definition: gridpp.h:502
vec2 neighbourhood(const vec2 &input, int radius, Statistic statistic)
Spatial neighbourhood filter.
Definition: neighbourhood.cpp:26
float qnh(float pressure, float altitude)
Diagnose QNH from pressure and altitude.
Definition: qnh.cpp:3
float calc_quantile(const vec &array, float quantile)
Definition: util.cpp:89
vec2 test_vec2_output()
Testing function for 2D output vector.
Definition: util.cpp:345
Standard deviation of values.
Definition: gridpp.h:56
static const float MV
Definition: gridpp.h:29
vec test_vec_output()
Testing function for 1D output vector.
Definition: util.cpp:341
std::vector< vec > vec2
Definition: gridpp.h:18
vec get_neighbourhood_thresholds(const vec2 &input, int num_thresholds)
Calculate appropriate approximation thresholds for neighbourhood quantile.
Definition: neighbourhood.cpp:238
float pressure(float ielev, float oelev, float ipressure, float itemperature=288.15)
Calculate pressure at a new elevation.
Definition: pressure.cpp:2
float interpolate(float x, const std::vector< float > &iX, const std::vector< float > &iY)
Piecewise linear interpolation.o If x is outside the range of iX, then the min/max value of iY is use...
Definition: util.cpp:260
void warning(std::string string)
Definition: util.cpp:151
vec calc_even_quantiles(const vec &values, int num)
Get reasonably spaced quantiles from a vector of values, ignoring duplicate values but including the ...
Definition: util.cpp:175
boost::geometry::index::rtree< value, boost::geometry::index::quadratic< 16 > > mTree
Definition: gridpp.h:569
Mean of values.
Definition: gridpp.h:51
bool is_valid(float value)
Definition: util.cpp:18
vec2 neighbourhood_quantile(const vec2 &input, float quantile, int radius)
Spatial neighbourhood filter.
Definition: neighbourhood.cpp:459
float mLocalizationDistance
Definition: gridpp.h:435
std::vector< ivec > ivec2
Definition: gridpp.h:21
float test_vec3_input(const vec3 &input)
Testing function for 3D input vector.
Definition: util.cpp:330
int get_upper_index(float iX, const std::vector< float > &iValues)
Find the index in a vector that is equal or just above a value.
Definition: util.cpp:241
Continue past the end-points using a slope of 0.
Definition: gridpp.h:46
std::vector< float > vec
Definition: gridpp.h:17
Continue past the end-points using a slope of 1.
Definition: gridpp.h:43
float lat
Definition: gridpp.h:416
float * test_array(float *v, int n)
Special function whose presense is needed for SWIG.
Definition: util.cpp:303
vec3 test_vec3_output()
Testing function for 3D output vector.
Definition: util.cpp:351
Sum of values.
Definition: gridpp.h:58
double clock()
Definition: util.cpp:168
void error(std::string string)
Definition: util.cpp:155
float test_vec2_input(const vec2 &input)
Testing function for 2D input vector.
Definition: util.cpp:321