annotate src/include/interpolator.hpp @ 61:b3bf4ac981ec default tip

Update the doxygen documentation
author Jordi Gutiérrez Hermoso <jordigh@gmail.com>
date Sat, 29 May 2010 20:01:40 -0500
parents 11395e64852f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15
5144dd3c5468 Almost completed adding all Doxygen docstrings.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 14
diff changeset
1 /*!\file interpolator.hpp
5144dd3c5468 Almost completed adding all Doxygen docstrings.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 14
diff changeset
2 *
5144dd3c5468 Almost completed adding all Doxygen docstrings.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 14
diff changeset
3 * \brief An interpolator \f$ \displaystyle u(x) = \sum_{\xi \in \Xi}
5144dd3c5468 Almost completed adding all Doxygen docstrings.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 14
diff changeset
4 * \lambda_\xi \varphi_\xi(x) \f$, templated by RBFs, and its helper
5144dd3c5468 Almost completed adding all Doxygen docstrings.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 14
diff changeset
5 * classes are declared here.
5144dd3c5468 Almost completed adding all Doxygen docstrings.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 14
diff changeset
6 *
16
29a7b95c2805 Essentially all Doxygen docstrings complete.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 15
diff changeset
7 * \file interpolator.cpp
29a7b95c2805 Essentially all Doxygen docstrings complete.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 15
diff changeset
8 * \brief Implementations and instantiations of the functions and
29a7b95c2805 Essentially all Doxygen docstrings complete.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 15
diff changeset
9 * classes declared in interpolator.hpp
15
5144dd3c5468 Almost completed adding all Doxygen docstrings.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 14
diff changeset
10 */
58
11395e64852f Replace include guards with #pragma once
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 54
diff changeset
11 #pragma once
0
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
12
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
13 #include <vector>
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
14 #include <map>
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
15 #include <boost/shared_ptr.hpp>
24
ad9e3d28ce9b Implement op<< for bvp::interpolator
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 23
diff changeset
16 #include <iostream>
0
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
17 #include "bvp.hpp"
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
18 #include "linalg.hpp"
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
19 #include "func.hpp"
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
20 #include "diff_op.hpp"
18
382e3b8e3f88 Compiles, and runs, but doesn't produce desired output. Must investigate this further.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 17
diff changeset
21 #include "interp_values.hpp"
0
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
22
32
bb8a95bf2aa4 Rename kwantxi to kwantix
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 30
diff changeset
23 namespace kwantix{
40
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
24 using std::map;
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
25 using boost::shared_ptr;
4
9d4fda54a41d Buggy, must check why interpolator assignment destroys precomputed
Jordi Guitérrez Hermoso <jordigh@gmail.com>
parents: 0
diff changeset
26
61
b3bf4ac981ec Update the doxygen documentation
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 58
diff changeset
27 /** \defgroup Interpolator */
b3bf4ac981ec Update the doxygen documentation
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 58
diff changeset
28 /// \{
42
3f8311cbf602 Setup initial class for vtkplot; cleanup interpolator to use C++1x's auto and untabify
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 40
diff changeset
29 class vtkplot;
3f8311cbf602 Setup initial class for vtkplot; cleanup interpolator to use C++1x's auto and untabify
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 40
diff changeset
30
40
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
31 //FIXME: Break this up into an ansatz class and an interpolator
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
32 //class.
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
33 /*! \brief An interpolator \f$ \displaystyle u(x) = \sum_{\xi \in
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
34 * \Xi} \lambda_\xi \varphi_\xi(x) \f$, where the \f$ \varphi_\xi
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
35 * \f$ are RBFs.
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
36 *
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
37 * An interpolator \f$ \displaystyle u(x) = \sum_{\xi \in \Xi}
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
38 * \lambda_\xi \varphi_\xi(x) \f$, where the \f$\varphi_\xi\f$ are
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
39 * RBFs centred at \f$\xi\f$, and \f$\Xi\f$ is a set of points on
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
40 * the interior and boundary of some domain \f$\Omega\f$.
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
41 *
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
42 * The interpolator can be used in various ways, initialised by
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
43 * either a BVP::linear_bvp2 or by interpolation data
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
44 * (i.e. std::map< kwantix::point, double>). Once an interpolator is
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
45 * initialised, it becomes a bona fide kwantix::realfunc, so that its
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
46 * evaluations and derivatives become available. For certain
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
47 * problems, it is convenient to be able to evaluate the
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
48 * interpolator or its derivatives at all points of the domain. It
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
49 * is also useful to be able to interpolate again on the same domain
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
50 * or with a slightly modified BVP. Interfaces to both of these
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
51 * functions are provided.
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
52 */
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
53 template<typename RBF>
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
54 class interpolator : public realfunc{
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
55 public:
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
56
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
57 /** @name Constructors
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
58 *
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
59 * Constructors that take interpolation data perform the
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
60 * interpolation as part of the initialisation, which includes
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
61 * factoring a matrix
15
5144dd3c5468 Almost completed adding all Doxygen docstrings.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 14
diff changeset
62 */
40
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
63 //@{
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
64 ///Does not initialise the interpolator.
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
65 interpolator();
4
9d4fda54a41d Buggy, must check why interpolator assignment destroys precomputed
Jordi Guitérrez Hermoso <jordigh@gmail.com>
parents: 0
diff changeset
66
40
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
67 ///Interpolate given a BVP
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
68 interpolator(shared_ptr<linear_BVP2> bvp);
0
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
69
40
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
70 ///Interpolate given some data points and the value at those points
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
71 interpolator(const map<point, double>& Xi);
0
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
72
40
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
73 /** \short Interpolate given a domain, data points and the value
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
74 * at those points
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
75 *
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
76 * Must provide domain information. The values of Xi must match
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
77 * points on the given domain Omega. The reason why the domain
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
78 * might be relevant is in case it is important to specify which
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
79 * points are on the interior and which are on the boundary, so
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
80 * that it's possible to interpolate again by changing the values
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
81 * on either the interior or the boundary.
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
82 */
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
83 interpolator(shared_ptr<domain> Omega, const map<point, double>& Xi);
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
84 //@}
0
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
85
40
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
86 /** @name Interpolation
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
87 *
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
88 * Interpolate again either given new data or a different BVP.
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
89 */
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
90 //@{
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
91 void interpolate(const map<point, double>& Xi);
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
92 void interpolate(shared_ptr<linear_BVP2> bvp);
13
0531194a431d Preliminary whole domain evaluations
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 12
diff changeset
93
40
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
94 /** \short Interpolate given values on the domain
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
95 *
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
96 * The given values must match the values returned by other
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
97 * interpolators on compatible domains.
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
98 */
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
99 void interpolate(const interp_values& values);
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
100 //@}
0
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
101
40
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
102 /** @name Pointwise evaluation and derivatives
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
103 */
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
104 //@{
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
105 ///Point evaluation
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
106 double operator()(const point& p) const;
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
107 ///Point evaluation
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
108 double at(const point& p) const;
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
109 /// Pointwise first derivative
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
110 double d(const point& p, size_t k) const;
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
111 /// Pointwise second derivatives
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
112 double d2(const point &p, size_t k1, size_t k2) const;
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
113 //@}
14
e6d2cd3b6e77 Intermediate whole domain evaluation work
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 13
diff changeset
114
40
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
115 /** @name Full domain evaluation and derivatives
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
116 */
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
117 //@{
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
118 ///Full domain evaluation
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
119 interp_values operator()() const;
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
120 ///Full domain evaluation
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
121 interp_values at() const;
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
122 /// Full domain first derivative
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
123 interp_values d(size_t k) const;
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
124 /// Full domain second derivatives
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
125 interp_values d2(size_t k1, size_t k2) const;
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
126 //@}
0
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
127
40
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
128 /** @name Precomputation of RBFs
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
129 *
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
130 * The following functions will precompute upon request all the
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
131 * interpolator's RBFs at all points of the domain. This may speed
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
132 * up some computations at the expense of increasing memory
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
133 * usage.
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
134 */
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
135 //@{
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
136 ///Precompute all the function evaluation of the RBFs.
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
137 void precompute_ev();
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
138 ///Precompute all relevant first derivatives.
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
139 void precompute_d1() ;
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
140 ///Precompute all relevant second derivatives.
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
141 void precompute_d2();
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
142 //@}
11
d0076d9b2ef1 Conclude precomputation revision
Jordi Guitérrez Hermoso <jordigh@gmail.com>
parents: 6
diff changeset
143
40
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
144 /** @name Partial redefinitions
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
145 *
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
146 * These functions allow for partial redefinition of the BVP as
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
147 * equired for the additive Schwartz domain decomposition method,
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
148 * and for other methods. They do not factor a matrix again.
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
149 */
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
150 //@{
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
151 void set_f(const intr_values &f);
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
152 void set_g(const bdry_values &g);
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
153 void set_f(const realfunc &f);
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
154 void set_g(const realfunc &g);
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
155 void set_f(const map<point, double>& f);
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
156 void set_g(const map<point, double>& g);
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
157 //@}
0
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
158
40
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
159 /** @name Reinterpolate again
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
160 *
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
161 * As above group of functions, but for purely interpolating
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
162 * interpolators
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
163 */
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
164 //@{
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
165 void set_bdry_values(const bdry_values& b_new);
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
166 //@}
17
72412107029b On the final stretch, implementing the interface in set_bdry_conds
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 16
diff changeset
167
40
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
168 /** @name Linear arithmetic operators
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
169 *
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
170 * These functions return a new interpolator. They are pointwise
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
171 * linear operations and work by manipulating interpolator
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
172 * coefficients.
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
173 */
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
174 //@{
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
175 /// Needs two operators on the same domain.
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
176 interpolator<RBF> operator+(const interpolator<RBF>& u) const;
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
177 /// Needs two operators on the same domain.
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
178 interpolator<RBF> operator-(const interpolator<RBF>& u) const;
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
179 /// Returns a scaled interpolator.
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
180 interpolator<RBF> operator*(double a) const;
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
181 /// Returns a scaled interpolator.
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
182 interpolator<RBF> operator/(double a) const;
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
183 //@}
17
72412107029b On the final stretch, implementing the interface in set_bdry_conds
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 16
diff changeset
184
40
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
185 /** \brief Provide a unit normals object associated to the
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
186 * interpolator.
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
187 */
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
188 normals get_normals() const;
0
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
189
40
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
190 /** \brief This will put into an ostream a kwantix::matrix where
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
191 * the first \f$n-1\f$ columns will be all the points where the
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
192 * interpolator is defined and the \f$n^{th}\f$ column is the
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
193 * values that the interpolator takes on that point.
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
194 */
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
195 void into_os(std::ostream& os) const;
42
3f8311cbf602 Setup initial class for vtkplot; cleanup interpolator to use C++1x's auto and untabify
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 40
diff changeset
196
3f8311cbf602 Setup initial class for vtkplot; cleanup interpolator to use C++1x's auto and untabify
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 40
diff changeset
197 ///Needed in order to plot the data
3f8311cbf602 Setup initial class for vtkplot; cleanup interpolator to use C++1x's auto and untabify
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 40
diff changeset
198 friend class vtkplot;
23
acefa48d4b4d Not compiling, added .hgignore
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 20
diff changeset
199
40
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
200 private:
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
201 ///Once the matrix is defined, this function inverts it.
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
202 void computecoeffs(bool rhs_defined = false);
0
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
203
40
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
204 ///Perform the actual interpolation.
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
205 void init(shared_ptr<linear_BVP2> bvp);
0
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
206
40
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
207 ///If the coefficients change, need to recompute precomputed values
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
208 void recompute_values_vec();
20
9cd42f1be76e w00t, bugs squashed, thing actually works\!
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 18
diff changeset
209
40
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
210 ///BVP associated to this interpolator
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
211 shared_ptr<linear_BVP2> thebvp;
0
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
212
40
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
213 ///Number of interior points.
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
214 size_t n;
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
215 ///Number of boundary points.
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
216 size_t m;
0
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
217
40
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
218 ///The matrix to invert.
54
ac5c22eb647c Optimise not copying matrices by replacing biggest uses with shared_ptr<matrix>, remove some debug code, use C++0x auto where useful.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 42
diff changeset
219 shared_ptr<matrix> M;
0
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
220
40
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
221 ///Is the interpolator ready for use?
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
222 bool initted;
13
0531194a431d Preliminary whole domain evaluations
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 12
diff changeset
223
23
acefa48d4b4d Not compiling, added .hgignore
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 20
diff changeset
224
40
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
225 /** @name Exception builders
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
226 */
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
227 //@{
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
228 kwantix::badArgument not_initted(int line, string file) const;
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
229 kwantix::badArgument not_precomputed(int line, string file) const;
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
230 //@}
4
9d4fda54a41d Buggy, must check why interpolator assignment destroys precomputed
Jordi Guitérrez Hermoso <jordigh@gmail.com>
parents: 0
diff changeset
231
40
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
232 ///Coefficients of the RBFs
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
233 kwantix::vector coeffs;
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
234 ///The RBFS
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
235 std::vector<RBF> rbfs;
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
236 ///Their hash
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
237 size_t rbfs_hash;
0
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
238
40
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
239 ///An RBF hasher
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
240 size_t hash_value(const std::vector<RBF>& rbfs_in);
18
382e3b8e3f88 Compiles, and runs, but doesn't produce desired output. Must investigate this further.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 17
diff changeset
241
40
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
242 ///The normals at the domain's boundary
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
243 normals nrmls;
4
9d4fda54a41d Buggy, must check why interpolator assignment destroys precomputed
Jordi Guitérrez Hermoso <jordigh@gmail.com>
parents: 0
diff changeset
244
40
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
245 /** \short Precomputed RBFs
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
246 *
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
247 * For all points on the domain, this stores all the RBFs
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
248 * evaluated at those points, as well as the derivatives on where
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
249 * the RBFs have been evaluated. This is to speed up successive
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
250 * evaluations of the interpolator when the interpolator's domain
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
251 * doesn't change.
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
252 *
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
253 * The keys in this map are vectors that represent the multindex
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
254 * for the derivative, where missing trailing entries in the
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
255 * vector represents zeros. Thus, an empty vector represents
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
256 * evaluation instead of derivatives.
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
257 */
54
ac5c22eb647c Optimise not copying matrices by replacing biggest uses with shared_ptr<matrix>, remove some debug code, use C++0x auto where useful.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 42
diff changeset
258 mutable map<std::vector<size_t>,
ac5c22eb647c Optimise not copying matrices by replacing biggest uses with shared_ptr<matrix>, remove some debug code, use C++0x auto where useful.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 42
diff changeset
259 shared_ptr<matrix> > precomp_rbfs;
11
d0076d9b2ef1 Conclude precomputation revision
Jordi Guitérrez Hermoso <jordigh@gmail.com>
parents: 6
diff changeset
260
40
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
261 /** @name Evaluation flags
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
262 *Have the RBFs or their derivatives been precomputed?
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
263 */
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
264 //@{
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
265 bool ev_precomp;
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
266 bool d1_precomp;
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
267 bool d2_precomp;
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
268 //@}
4
9d4fda54a41d Buggy, must check why interpolator assignment destroys precomputed
Jordi Guitérrez Hermoso <jordigh@gmail.com>
parents: 0
diff changeset
269
40
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
270 /// Precomputed values using precomp_rbfs
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
271 mutable map<std::vector<size_t>, map<point, double> >
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
272 precomp_values;
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
273 /// Same, but storing the vectors.
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
274 mutable map<std::vector<size_t>, kwantix::vector >
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
275 precomp_values_vec;
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
276 /// Convert vector of values to a map
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
277 map<point, double> valsvec2map(const kwantix::vector& values) const;
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
278 };
61
b3bf4ac981ec Update the doxygen documentation
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 58
diff changeset
279 /// \}
0
4fa56dc7e271 Initial commit
jordi@Iris
parents:
diff changeset
280
16
29a7b95c2805 Essentially all Doxygen docstrings complete.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 15
diff changeset
281
40
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
282 /// For comfortable syntax
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
283 template <typename RBF>
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
284 interpolator<RBF> operator*(double a, const interpolator<RBF>& u)
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
285 {
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
286 return u*a;
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
287 }
24
ad9e3d28ce9b Implement op<< for bvp::interpolator
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 23
diff changeset
288
40
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
289 /// Stream insertion
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
290 template <typename RBF>
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
291 std::ostream& operator<< (std::ostream& os, const interpolator<RBF>& u)
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
292 {
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
293 u.into_os(os);
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
294 return os;
eaa99e09607d Remove indentation due to namespace scope
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 32
diff changeset
295 }
24
ad9e3d28ce9b Implement op<< for bvp::interpolator
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 23
diff changeset
296
61
b3bf4ac981ec Update the doxygen documentation
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 58
diff changeset
297 }//namespace kwantix
b3bf4ac981ec Update the doxygen documentation
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 58
diff changeset
298