ccgsl 2.7.2
C++wrappersforGnuScientificLibrary
interp2d.hpp
Go to the documentation of this file.
1/*
2 * $Id$
3 * Copyright (C) 2019 John D Lamb
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or (at
8 * your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18 */
19
20#ifndef CCGSL_INTERP2D_HPP
21#define CCGSL_INTERP2D_HPP
22
23#include<stdexcept>
24#include<gsl/gsl_interp2d.h>
25#include"interp.hpp"
26
27namespace gsl {
31 class interp2d {
32 public:
36 typedef gsl_interp2d_type type;
41 ccgsl_pointer = 0;
42 count = 0; // initially nullptr will do
43 }
44 // Refines random access container
45 // Refines assignable
52 explicit interp2d( type const* T, size_t const xsize, size_t const ysize ){
53 ccgsl_pointer = gsl_interp2d_alloc( T, xsize, ysize );
54 // just plausibly we could allocate interp2d but not count
55 try { count = new size_t; } catch( std::bad_alloc& e ){
56 // try to tidy up before rethrowing
57 gsl_interp2d_free( ccgsl_pointer );
58 throw e;
59 }
60 *count = 1; // initially there is just one reference to ccgsl_pointer
61 }
68 explicit interp2d( gsl_interp2d* v ){
69 ccgsl_pointer = v;
70 // just plausibly we could fail to allocate count: no further action needed.
71 count = new size_t;
72 *count = 1; // initially there is just one reference to ccgsl_pointer
73 }
74 // copy constructor
80 count = v.count; if( count != 0 ) ++*count; }
81 // assignment operator
87 // first, possibly delete anything pointed to by this
88 if( count == 0 or --*count == 0 ){
89 if( ccgsl_pointer != 0 ) gsl_interp2d_free( ccgsl_pointer );
90 delete count;
91 } // Then copy
92 ccgsl_pointer = v.ccgsl_pointer; count = v.count; if( count != 0 ) ++*count; return *this;
93 }
94 // destructor
99 if( count == 0 or --*count == 0 ){
100 // could have allocated null pointer
101 if( ccgsl_pointer != 0 ) gsl_interp2d_free( ccgsl_pointer );
102 delete count;
103 }
104 }
105#ifdef __GXX_EXPERIMENTAL_CXX0X__
111 std::swap( count, v.count );
112 v.ccgsl_pointer = nullptr;
113 }
120 interp2d( std::move( v ) ).swap( *this );
121 return *this;
122 }
123#endif
124 // Refines equality comparable
125 // == operator
132 bool operator==( interp2d const& v ) const { return ccgsl_pointer == v.ccgsl_pointer; }
133 // != operator
140 bool operator!=( interp2d const& v ) const { return not operator==( v ); }
141 // Refines forward container
142 // Refines less than comparable
143 // operator<
152 bool operator<( interp2d const& v ) const { return ccgsl_pointer < v.ccgsl_pointer; }
153 // operator>
162 bool operator>( interp2d const& v ) const { return ccgsl_pointer > v.ccgsl_pointer; }
163 // operator<=
172 bool operator<=( interp2d const& v ) const { return ccgsl_pointer <= v.ccgsl_pointer; }
173 // operator>=
182 bool operator>=( interp2d const& v ) const { return ccgsl_pointer >= v.ccgsl_pointer; }
187 bool empty() const { return ccgsl_pointer == 0; }
188 // swap() --- should work even if sizes don't match
194 void swap( interp2d& v ){
195 std::swap( ccgsl_pointer, v.ccgsl_pointer );
196 std::swap( count, v.count );
197 }
198 private:
202 gsl_interp2d* ccgsl_pointer;
206 size_t* count;
207 public:
208 // shared reference functions
213 gsl_interp2d* get() const { return ccgsl_pointer; }
219 bool unique() const { return count != 0 and *count == 1; }
224 size_t use_count() const { return count == 0 ? 0 : *count; }
230#ifdef __GXX_EXPERIMENTAL_CXX0X__
231 explicit
232#endif
233 operator bool() const { return ccgsl_pointer != 0; }
238 char const* name() const { return gsl_interp2d_name( get() ); }
243 size_t min_size() const { return gsl_interp2d_min_size( get() ); }
249 static size_t type_min_size( type const* T ){ return gsl_interp2d_type_min_size( T ); }
258 int set( double zarr[], size_t const i, size_t const j, double const z ) const {
259 return gsl_interp2d_set( get(), zarr, i, j, z ); }
268 template<typename ARRAY>
269 int set( ARRAY& zarr, size_t const i, size_t const j, double const z ) const {
270 if( zarr.size() != get()->xsize * get()->ysize )
271 throw std::range_error("gsl::interp2d::set(): zarr has wrong size.");
272 return gsl_interp2d_set( get(), zarr.data(), i, j, z ); }
280 double get( double const zarr[], size_t const i, size_t const j ) const {
281 return gsl_interp2d_get( get(), zarr, i, j ); }
289 template<typename ARRAY>
290 double get( ARRAY const& zarr, size_t const i, size_t const j ) const {
291 if( zarr.size() != get()->xsize * get()->ysize )
292 throw std::range_error("gsl::interp2d::get(): zarr has wrong size.");
293 return gsl_interp2d_get( get(), zarr.data(), i, j ); }
300 size_t idx( size_t const i, size_t const j ) const {
301 return gsl_interp2d_idx( get(), i, j ); }
311 int init( double const xa[], double const ya[], double const za[], size_t const xsize,
312 size_t const ysize ){
313 return gsl_interp2d_init( get(), xa, ya, za, xsize, ysize ); }
322 template<typename VECTOR>
323 int init( VECTOR const& xa, VECTOR const& ya, VECTOR const& za ){
324 if( za.size() != xa.size() * ya.size() )
325 throw std::range_error("gsl::interp2d::init(): za has wrong size.");
326 return gsl_interp2d_init( get(), xa.data(), ya.data(), za.data(),
327 xa.size(), ya.size() ); }
339 double eval( double const xarr[], double const yarr[], double const zarr[],
340 double const x, double const y, interp::accel& xa, interp::accel& ya ) const {
341 return gsl_interp2d_eval( get(), xarr, yarr, zarr, x, y, xa.get(), ya.get() ); }
354 template<typename VECTOR>
355 double eval( VECTOR const& xarr, VECTOR const& yarr, VECTOR const& zarr,
356 double const x, double const y, interp::accel& xa, interp::accel& ya ) const {
357 if( zarr.size() != xarr.size() * yarr.size() )
358 throw std::range_error("gsl::interp2d::eval(): zarr has wrong size.");
359 return gsl_interp2d_eval( get(), xarr.data(), yarr.data(), zarr.data(),
360 x, y, xa.get(), ya.get() ); }
372 double eval_extrap( double const xarr[], double const yarr[], double const zarr[],
373 double const x, double const y,
374 interp::accel& xa, interp::accel& ya ) const {
375 return gsl_interp2d_eval_extrap( get(), xarr, yarr, zarr, x, y, xa.get(),
376 ya.get() ); }
389 template<typename VECTOR>
390 double eval_extrap( VECTOR const& xarr, VECTOR const& yarr, VECTOR const& zarr,
391 double const x, double const y,
392 interp::accel& xa, interp::accel& ya ) const {
393 if( zarr.size() != xarr.size() * yarr.size() )
394 throw std::range_error("gsl::interp2d::eval_extrap(): zarr has wrong size.");
395 return gsl_interp2d_eval_extrap( get(), xarr.data(), yarr.data(), zarr.data(),
396 x, y, xa.get(), ya.get() ); }
409 int eval_e( double const xarr[], double const yarr[], double const zarr[],
410 double const x, double const y,
411 interp::accel& xa, interp::accel& ya, double& z ) const {
412 return gsl_interp2d_eval_e( get(), xarr, yarr, zarr, x, y,
413 xa.get(), ya.get(), &z ); }
427 template<typename VECTOR>
428 int eval_e( VECTOR const& xarr, VECTOR const& yarr, VECTOR const& zarr,
429 double const x, double const y,
430 interp::accel& xa, interp::accel& ya, double& z ) const {
431 if( zarr.size() != xarr.size() * yarr.size() )
432 throw std::range_error("gsl::interp2d::eval_e(): zarr has wrong size.");
433 return gsl_interp2d_eval_e( get(), xarr.data(), yarr.data(), zarr.data(),
434 x, y, xa.get(), ya.get(), &z ); }
435#ifndef GSL_DISABLE_DEPRECATED
448 int eval_e_extrap( double const xarr[], double const yarr[], double const zarr[],
449 double const x, double const y,
450 interp::accel& xa, interp::accel& ya, double& z ) const {
451 return gsl_interp2d_eval_e_extrap( get(), xarr, yarr, zarr, x, y,
452 xa.get(), ya.get(), &z ); }
466 template<typename VECTOR>
467 int eval_e_extrap( VECTOR const& xarr, VECTOR const& yarr, VECTOR const& zarr,
468 double const x, double const y,
469 interp::accel& xa, interp::accel& ya, double& z ) const {
470 return gsl_interp2d_eval_e_extrap( get(), xarr.data(), yarr.data(), zarr.data(), x, y,
471 xa.get(), ya.get(), &z ); }
472#else
485 int eval_extrap_e( double const xarr[], double const yarr[], double const zarr[],
486 double const x, double const y,
487 interp::accel& xa, interp::accel& ya, double& z ) const {
488 return gsl_interp2d_eval_extrap_e( get(), xarr, yarr, zarr, x, y,
489 xa.get(), ya.get(), &z ); }
503 template<typename VECTOR>
504 int eval_extrap_e( VECTOR const& xarr, VECTOR const& yarr, VECTOR const& zarr,
505 double const x, double const y,
506 interp::accel& xa, interp::accel& ya, double& z ) const {
507 if( zarr.size() != xarr.size() * yarr.size() )
508 throw std::range_error("gsl::interp2d::extrap_e(): zarr has wrong size.");
509 return gsl_interp2d_eval_extrap_e( get(), xarr.data(), yarr.data(), zarr.data(), x, y,
510 xa.get(), ya.get(), &z ); }
511#endif /* !GSL_DISABLE_DEPRECATED */
523 double eval_deriv_x( double const xarr[], double const yarr[], double const zarr[],
524 double const x, double const y,
525 interp::accel& xa, interp::accel& ya ) const {
526 return gsl_interp2d_eval_deriv_x( get(), xarr, yarr, zarr, x, y, xa.get(),
527 ya.get() ); }
540 template<typename VECTOR>
541 double eval_deriv_x( VECTOR const& xarr, VECTOR const& yarr, VECTOR const& zarr,
542 double const x, double const y,
543 interp::accel& xa, interp::accel& ya ) const {
544 if( zarr.size() != xarr.size() * yarr.size() )
545 throw std::range_error("gsl::interp2d::eval_deriv_x(): zarr has wrong size.");
546 return gsl_interp2d_eval_deriv_x( get(), xarr.data(), yarr.data(), zarr.data(),
547 x, y, xa.get(), ya.get() ); }
560 int eval_deriv_x_e( double const xarr[], double const yarr[], double const zarr[],
561 double const x, double const y, interp::accel& xa, interp::accel& ya,
562 double& z ) const {
563 return gsl_interp2d_eval_deriv_x_e( get(), xarr, yarr, zarr, x, y,
564 xa.get(), ya.get(), &z ); }
578 template<typename VECTOR>
579 int eval_deriv_x_e( VECTOR const& xarr, VECTOR const& yarr, VECTOR const& zarr,
580 double const x, double const y, interp::accel& xa, interp::accel& ya,
581 double& z ) const {
582 if( zarr.size() != xarr.size() * yarr.size() )
583 throw std::range_error("gsl::interp2d::eval_deriv-x_e(): zarr has wrong size.");
584 return gsl_interp2d_eval_deriv_x_e( get(), xarr.data(), yarr.data(), zarr.data(), x, y,
585 xa.get(), ya.get(), &z ); }
597 double eval_deriv_y( double const xarr[], double const yarr[], double const zarr[],
598 double const x, double const y,
599 interp::accel& xa, interp::accel& ya ) const {
600 return gsl_interp2d_eval_deriv_y( get(), xarr, yarr, zarr, x, y,
601 xa.get(), ya.get() ); }
614 template<typename VECTOR>
615 double eval_deriv_y( VECTOR const& xarr, VECTOR const& yarr, VECTOR const& zarr,
616 double const x, double const y,
617 interp::accel& xa, interp::accel& ya ) const {
618 if( zarr.size() != xarr.size() * yarr.size() )
619 throw std::range_error("gsl::interp2d::eval_deriv_y(): zarr has wrong size.");
620 return gsl_interp2d_eval_deriv_y( get(), xarr.data(), yarr.data(), zarr.data(), x, y,
621 xa.get(), ya.get() ); }
634 int eval_deriv_y_e( double const xarr[], double const yarr[], double const zarr[],
635 double const x, double const y, interp::accel& xa, interp::accel& ya,
636 double& z ) const {
637 return gsl_interp2d_eval_deriv_y_e( get(), xarr, yarr, zarr, x, y,
638 xa.get(), ya.get(), &z ); }
652 template<typename VECTOR>
653 int eval_deriv_y_e( VECTOR const& xarr, VECTOR const& yarr, VECTOR const& zarr,
654 double const x, double const y, interp::accel& xa, interp::accel& ya,
655 double& z ) const {
656 if( zarr.size() != xarr.size() * yarr.size() )
657 throw std::range_error("gsl::interp2d::eval_deriv_y_e(): zarr has wrong size.");
658 return gsl_interp2d_eval_deriv_y_e( get(), xarr.data(), yarr.data(), zarr.data(), x, y,
659 xa.get(), ya.get(), &z ); }
671 double eval_deriv_xx( double const xarr[], double const yarr[], double const zarr[],
672 double const x, double const y,
673 interp::accel& xa, interp::accel& ya ) const {
674 return gsl_interp2d_eval_deriv_xx( get(), xarr, yarr, zarr, x, y,
675 xa.get(), ya.get() ); }
688 template<typename VECTOR>
689 double eval_deriv_xx( VECTOR const& xarr, VECTOR const& yarr, VECTOR const& zarr,
690 double const x, double const y,
691 interp::accel& xa, interp::accel& ya ) const {
692 if( zarr.size() != xarr.size() * yarr.size() )
693 throw std::range_error("gsl::interp2d::eval_deriv_xx(): zarr has wrong size.");
694 return gsl_interp2d_eval_deriv_xx( get(), xarr.data(), yarr.data(), zarr.data(), x, y,
695 xa.get(), ya.get() ); }
708 int eval_deriv_xx_e( double const xarr[], double const yarr[], double const zarr[],
709 double const x, double const y,
710 interp::accel& xa, interp::accel& ya, double& z ) const {
711 return gsl_interp2d_eval_deriv_xx_e( get(), xarr, yarr, zarr, x, y,
712 xa.get(), ya.get(), &z ); }
726 template<typename VECTOR>
727 int eval_deriv_xx_e( VECTOR const& xarr, VECTOR const& yarr, VECTOR const& zarr,
728 double const x, double const y, interp::accel& xa, interp::accel& ya,
729 double& z ) const {
730 if( zarr.size() != xarr.size() * yarr.size() )
731 throw std::range_error("gsl::interp2d::eval_deriv_xx_e(): zarr has wrong size.");
732 return gsl_interp2d_eval_deriv_xx_e( get(), xarr.data(), yarr.data(), zarr.data(), x, y,
733 xa.get(), ya.get(), &z ); }
745 double eval_deriv_yy( double const xarr[], double const yarr[], double const zarr[],
746 double const x, double const y,
747 interp::accel& xa, interp::accel& ya ) const {
748 return gsl_interp2d_eval_deriv_yy( get(), xarr, yarr, zarr, x, y,
749 xa.get(), ya.get() ); }
762 template<typename VECTOR>
763 double eval_deriv_yy( VECTOR const& xarr, VECTOR const& yarr, VECTOR const& zarr,
764 double const x, double const y,
765 interp::accel& xa, interp::accel& ya ) const {
766 if( zarr.size() != xarr.size() * yarr.size() )
767 throw std::range_error("gsl::interp2d::eval_deriv_yy(): zarr has wrong size.");
768 return gsl_interp2d_eval_deriv_yy( get(), xarr.data(), yarr.data(), zarr.data(), x, y,
769 xa.get(), ya.get() ); }
782 int eval_deriv_yy_e( double const xarr[], double const yarr[], double const zarr[],
783 double const x, double const y,
784 interp::accel& xa, interp::accel& ya, double& z ) const {
785 return gsl_interp2d_eval_deriv_yy_e( get(), xarr, yarr, zarr, x, y,
786 xa.get(), ya.get(), &z ); }
800 template<typename VECTOR>
801 int eval_deriv_yy_e( VECTOR const& xarr, VECTOR const& yarr, VECTOR const& zarr,
802 double const x, double const y,
803 interp::accel& xa, interp::accel& ya, double& z ) const {
804 if( zarr.size() != xarr.size() * yarr.size() )
805 throw std::range_error("gsl::interp2d::eval_deriv_yy_e(): zarr has wrong size.");
806 return gsl_interp2d_eval_deriv_yy_e( get(), xarr.data(), yarr.data(), zarr.data(), x, y,
807 xa.get(), ya.get(), &z ); }
819 double eval_deriv_xy( double const xarr[], double const yarr[], double const zarr[],
820 double const x, double const y,
821 interp::accel& xa, interp::accel& ya ) const {
822 return gsl_interp2d_eval_deriv_xy( get(), xarr, yarr, zarr, x, y,
823 xa.get(), ya.get() ); }
836 template<typename VECTOR>
837 double eval_deriv_xy( VECTOR const& xarr, VECTOR const& yarr, VECTOR const& zarr,
838 double const x, double const y,
839 interp::accel& xa, interp::accel& ya ) const {
840 if( zarr.size() != xarr.size() * yarr.size() )
841 throw std::range_error("gsl::interp2d::eval_deriv_xy(): zarr has wrong size.");
842 return gsl_interp2d_eval_deriv_xy( get(), xarr.data(), yarr.data(), zarr.data(), x, y,
843 xa.get(), ya.get() ); }
856 int eval_deriv_xy_e( double const xarr[], double const yarr[], double const zarr[],
857 double const x, double const y,
858 interp::accel& xa, interp::accel& ya, double& z ) const {
859 return gsl_interp2d_eval_deriv_xy_e( get(), xarr, yarr, zarr, x, y,
860 xa.get(), ya.get(), &z ); }
874 template<typename VECTOR>
875 int eval_deriv_xy_e( VECTOR const& xarr, VECTOR const& yarr, VECTOR const& zarr,
876 double const x, double const y,
877 interp::accel& xa, interp::accel& ya, double& z ) const {
878 if( zarr.size() != xarr.size() * yarr.size() )
879 throw std::range_error("gsl::interp2d::eval_deriv_xy_e(): zarr has wrong size.");
880 return gsl_interp2d_eval_deriv_xy_e( get(), xarr.data(), yarr.data(), zarr.data(), x, y,
881 xa.get(), ya.get(), &z ); }
886 static type const* bilinear(){ return gsl_interp2d_bilinear; }
891 static type const* bicubic(){ return gsl_interp2d_bicubic; }
892 };
893}
894#endif
Interpolation.
Definition: interp2d.hpp:31
int eval_deriv_xy_e(VECTOR const &xarr, VECTOR const &yarr, VECTOR const &zarr, double const x, double const y, interp::accel &xa, interp::accel &ya, double &z) const
C++ version of gsl_interp2d_eval_deriv_xy_e().
Definition: interp2d.hpp:875
double eval_deriv_xx(VECTOR const &xarr, VECTOR const &yarr, VECTOR const &zarr, double const x, double const y, interp::accel &xa, interp::accel &ya) const
C++ version of gsl_interp2d_eval_deriv_xx().
Definition: interp2d.hpp:689
int init(double const xa[], double const ya[], double const za[], size_t const xsize, size_t const ysize)
C++ version of gsl_interp2d_init().
Definition: interp2d.hpp:311
interp2d & operator=(interp2d &&v)
Move operator.
Definition: interp2d.hpp:119
double eval_deriv_x(double const xarr[], double const yarr[], double const zarr[], double const x, double const y, interp::accel &xa, interp::accel &ya) const
C++ version of gsl_interp2d_eval_deriv_x().
Definition: interp2d.hpp:523
int set(double zarr[], size_t const i, size_t const j, double const z) const
C++ version of gsl_interp2d_set().
Definition: interp2d.hpp:258
double get(ARRAY const &zarr, size_t const i, size_t const j) const
C++ version of gsl_interp2d_get().
Definition: interp2d.hpp:290
static type const * bilinear()
2D interpolation static type.
Definition: interp2d.hpp:886
int eval_deriv_xy_e(double const xarr[], double const yarr[], double const zarr[], double const x, double const y, interp::accel &xa, interp::accel &ya, double &z) const
C++ version of gsl_interp2d_eval_deriv_xy_e().
Definition: interp2d.hpp:856
interp2d(type const *T, size_t const xsize, size_t const ysize)
The default constructor creates a new interp with n elements.
Definition: interp2d.hpp:52
void swap(interp2d &v)
Swap two interp2d objects.
Definition: interp2d.hpp:194
double eval_deriv_yy(VECTOR const &xarr, VECTOR const &yarr, VECTOR const &zarr, double const x, double const y, interp::accel &xa, interp::accel &ya) const
C++ version of gsl_interp2d_eval_deriv_yy().
Definition: interp2d.hpp:763
int eval_deriv_y_e(double const xarr[], double const yarr[], double const zarr[], double const x, double const y, interp::accel &xa, interp::accel &ya, double &z) const
C++ version of gsl_interp2d_eval_deriv_y_e().
Definition: interp2d.hpp:634
int eval_deriv_x_e(VECTOR const &xarr, VECTOR const &yarr, VECTOR const &zarr, double const x, double const y, interp::accel &xa, interp::accel &ya, double &z) const
C++ version of gsl_interp2d_eval_deriv_x_e().
Definition: interp2d.hpp:579
int eval_e_extrap(double const xarr[], double const yarr[], double const zarr[], double const x, double const y, interp::accel &xa, interp::accel &ya, double &z) const
C++ version of gsl_interp2d_eval_e_extrap().
Definition: interp2d.hpp:448
bool operator<(interp2d const &v) const
A container needs to define an ordering for sorting.
Definition: interp2d.hpp:152
size_t use_count() const
Find how many interp2d objects share this pointer.
Definition: interp2d.hpp:224
double eval_deriv_x(VECTOR const &xarr, VECTOR const &yarr, VECTOR const &zarr, double const x, double const y, interp::accel &xa, interp::accel &ya) const
C++ version of gsl_interp2d_eval_deriv_x().
Definition: interp2d.hpp:541
bool operator==(interp2d const &v) const
Two interp2d are identically equal if their elements are identical.
Definition: interp2d.hpp:132
bool operator!=(interp2d const &v) const
Two interp2d are different if their elements are not identical.
Definition: interp2d.hpp:140
int eval_deriv_y_e(VECTOR const &xarr, VECTOR const &yarr, VECTOR const &zarr, double const x, double const y, interp::accel &xa, interp::accel &ya, double &z) const
C++ version of gsl_interp2d_eval_deriv_y_e().
Definition: interp2d.hpp:653
double eval_deriv_y(VECTOR const &xarr, VECTOR const &yarr, VECTOR const &zarr, double const x, double const y, interp::accel &xa, interp::accel &ya) const
C++ version of gsl_interp2d_eval_deriv_y().
Definition: interp2d.hpp:615
int set(ARRAY &zarr, size_t const i, size_t const j, double const z) const
C++ version of gsl_interp2d_set().
Definition: interp2d.hpp:269
gsl_interp2d * ccgsl_pointer
The shared pointer.
Definition: interp2d.hpp:202
int eval_deriv_xx_e(double const xarr[], double const yarr[], double const zarr[], double const x, double const y, interp::accel &xa, interp::accel &ya, double &z) const
C++ version of gsl_interp2d_eval_deriv_xx_e().
Definition: interp2d.hpp:708
int eval_deriv_yy_e(VECTOR const &xarr, VECTOR const &yarr, VECTOR const &zarr, double const x, double const y, interp::accel &xa, interp::accel &ya, double &z) const
C++ version of gsl_interp2d_eval_deriv_yy_e().
Definition: interp2d.hpp:801
double get(double const zarr[], size_t const i, size_t const j) const
C++ version of gsl_interp2d_get().
Definition: interp2d.hpp:280
interp2d()
The default constructor is only really useful for assigning to.
Definition: interp2d.hpp:40
int eval_e_extrap(VECTOR const &xarr, VECTOR const &yarr, VECTOR const &zarr, double const x, double const y, interp::accel &xa, interp::accel &ya, double &z) const
C++ version of gsl_interp2d_eval_e_extrap().
Definition: interp2d.hpp:467
double eval(double const xarr[], double const yarr[], double const zarr[], double const x, double const y, interp::accel &xa, interp::accel &ya) const
C++ version of gsl_interp2d_eval().
Definition: interp2d.hpp:339
bool operator<=(interp2d const &v) const
A container needs to define an ordering for sorting.
Definition: interp2d.hpp:172
gsl_interp2d_type type
Convenient typedef.
Definition: interp2d.hpp:36
double eval_deriv_xy(VECTOR const &xarr, VECTOR const &yarr, VECTOR const &zarr, double const x, double const y, interp::accel &xa, interp::accel &ya) const
C++ version of gsl_interp2d_eval_deriv_xy().
Definition: interp2d.hpp:837
static type const * bicubic()
2D interpolation static type.
Definition: interp2d.hpp:891
interp2d(gsl_interp2d *v)
Could construct from a gsl_interp2d.
Definition: interp2d.hpp:68
interp2d & operator=(interp2d const &v)
The assignment operator.
Definition: interp2d.hpp:86
bool operator>=(interp2d const &v) const
A container needs to define an ordering for sorting.
Definition: interp2d.hpp:182
int eval_e(double const xarr[], double const yarr[], double const zarr[], double const x, double const y, interp::accel &xa, interp::accel &ya, double &z) const
C++ version of gsl_interp2d_eval_e().
Definition: interp2d.hpp:409
interp2d(interp2d &&v)
Move constructor.
Definition: interp2d.hpp:110
double eval_deriv_yy(double const xarr[], double const yarr[], double const zarr[], double const x, double const y, interp::accel &xa, interp::accel &ya) const
C++ version of gsl_interp2d_eval_deriv_yy().
Definition: interp2d.hpp:745
double eval_deriv_y(double const xarr[], double const yarr[], double const zarr[], double const x, double const y, interp::accel &xa, interp::accel &ya) const
C++ version of gsl_interp2d_eval_deriv_y().
Definition: interp2d.hpp:597
gsl_interp2d * get() const
Get the gsl_interp2d.
Definition: interp2d.hpp:213
int init(VECTOR const &xa, VECTOR const &ya, VECTOR const &za)
C++ version of gsl_interp2d_init().
Definition: interp2d.hpp:323
double eval_deriv_xy(double const xarr[], double const yarr[], double const zarr[], double const x, double const y, interp::accel &xa, interp::accel &ya) const
C++ version of gsl_interp2d_eval_deriv_xy().
Definition: interp2d.hpp:819
int eval_deriv_x_e(double const xarr[], double const yarr[], double const zarr[], double const x, double const y, interp::accel &xa, interp::accel &ya, double &z) const
C++ version of gsl_interp2d_eval_deriv_x_e().
Definition: interp2d.hpp:560
interp2d(interp2d const &v)
The copy constructor.
Definition: interp2d.hpp:79
int eval_e(VECTOR const &xarr, VECTOR const &yarr, VECTOR const &zarr, double const x, double const y, interp::accel &xa, interp::accel &ya, double &z) const
C++ version of gsl_interp2d_eval_e().
Definition: interp2d.hpp:428
double eval(VECTOR const &xarr, VECTOR const &yarr, VECTOR const &zarr, double const x, double const y, interp::accel &xa, interp::accel &ya) const
C++ version of gsl_interp2d_eval().
Definition: interp2d.hpp:355
size_t * count
The shared reference count.
Definition: interp2d.hpp:206
double eval_extrap(VECTOR const &xarr, VECTOR const &yarr, VECTOR const &zarr, double const x, double const y, interp::accel &xa, interp::accel &ya) const
C++ version of gsl_interp2d_eval_extrap().
Definition: interp2d.hpp:390
char const * name() const
C++ version of gsl_interp2d_name().
Definition: interp2d.hpp:238
bool operator>(interp2d const &v) const
A container needs to define an ordering for sorting.
Definition: interp2d.hpp:162
double eval_extrap(double const xarr[], double const yarr[], double const zarr[], double const x, double const y, interp::accel &xa, interp::accel &ya) const
C++ version of gsl_interp2d_eval_extrap().
Definition: interp2d.hpp:372
bool empty() const
Find if the interp2d is empty.
Definition: interp2d.hpp:187
static size_t type_min_size(type const *T)
C++ version of gsl_interp2d_type_min_size().
Definition: interp2d.hpp:249
size_t idx(size_t const i, size_t const j) const
C++ version of gsl_interp2d_idx().
Definition: interp2d.hpp:300
int eval_deriv_xx_e(VECTOR const &xarr, VECTOR const &yarr, VECTOR const &zarr, double const x, double const y, interp::accel &xa, interp::accel &ya, double &z) const
C++ version of gsl_interp2d_eval_deriv_xx_e().
Definition: interp2d.hpp:727
double eval_deriv_xx(double const xarr[], double const yarr[], double const zarr[], double const x, double const y, interp::accel &xa, interp::accel &ya) const
C++ version of gsl_interp2d_eval_deriv_xx().
Definition: interp2d.hpp:671
int eval_deriv_yy_e(double const xarr[], double const yarr[], double const zarr[], double const x, double const y, interp::accel &xa, interp::accel &ya, double &z) const
C++ version of gsl_interp2d_eval_deriv_yy_e().
Definition: interp2d.hpp:782
bool unique() const
Find if this is the only object sharing the gsl_interp2d.
Definition: interp2d.hpp:219
size_t min_size() const
C++ version of gsl_interp2d_min_size().
Definition: interp2d.hpp:243
~interp2d()
The destructor only deletes the pointers if count reaches zero.
Definition: interp2d.hpp:98
Workspace for acceleration.
Definition: interp.hpp:237
gsl_interp_accel * get() const
Get the gsl_interp_accel.
Definition: interp.hpp:405
int accel(ARRAY const &array, workspace &w, double &sum_accel, double &abserr)
C++ version of gsl_sum_levin_u_accel().
Definition: sum.hpp:281
The gsl package creates an interface to the GNU Scientific Library for C++.
Definition: blas.hpp:34