MathTL
|
00001 // -*- c++ -*- 00002 00003 // +--------------------------------------------------------------------+ 00004 // | This file is part of MathTL - the Mathematical Template Library | 00005 // | | 00006 // | Copyright (c) 2002-2009 | 00007 // | Thorsten Raasch, Manuel Werner | 00008 // +--------------------------------------------------------------------+ 00009 00010 #ifndef _MATHTL_SAMPLED_MAPPING_H 00011 #define _MATHTL_SAMPLED_MAPPING_H 00012 00013 #include <iostream> 00014 00015 #include <geometry/point.h> 00016 #include <geometry/grid.h> 00017 #include <utils/array1d.h> 00018 #include <utils/function.h> 00019 #include <utils/multiindex.h> 00020 #include <utils/fixed_array1d.h> 00021 #include <algebra/matrix.h> 00022 #include <algebra/infinite_vector.h> 00023 00024 #include <geometry/chart.h> 00025 00026 00027 namespace MathTL 00028 { 00034 template <unsigned int DIM, class C=double> 00035 class SampledMapping 00036 : public Grid<DIM> 00037 { 00038 public: 00042 SampledMapping() {} 00043 00047 SampledMapping(const SampledMapping<DIM>& sm); 00048 00052 SampledMapping(const Grid<DIM>& grid); 00053 00057 SampledMapping(const Grid<DIM>& grid, const Array1D<C>& values); 00058 00062 SampledMapping(const Grid<DIM>& grid, const Function<DIM>& f); 00063 00068 SampledMapping(const MultiIndex<int, DIM>& a, 00069 const MultiIndex<int, DIM>& b, 00070 const InfiniteVector<C, MultiIndex<int, DIM> >& values, 00071 const int resolution); 00072 00079 SampledMapping(const Point<DIM,C>& a, 00080 const Point<DIM,C>& b, 00081 const FixedArray1D<Array1D<C>,DIM>& values); 00082 00089 SampledMapping(const Chart<DIM>& ch, 00090 const FixedArray1D<Array1D<C>,DIM>& values, 00091 const unsigned int resolution); 00092 00099 SampledMapping(const Chart<DIM>& ch, 00100 const unsigned int resolution); 00101 00105 SampledMapping<DIM,C>& operator = (const SampledMapping<DIM,C>& sm); 00106 00111 void add(const SampledMapping<DIM,C>& s); 00112 00117 void add(const C alpha, const SampledMapping<DIM,C>& s); 00118 00122 void mult(const C alpha); 00123 00124 00128 void matlab_output(std::ostream& os) const; 00129 }; 00130 00131 // 00132 // 00133 // template specializations to one and two space dimensions 00134 00135 template <class C> 00136 class SampledMapping<1,C> 00137 : public Grid<1> 00138 { 00139 public: 00143 SampledMapping(); 00144 00148 SampledMapping(const SampledMapping<1,C>& sm); 00149 00153 SampledMapping(const Grid<1>& grid); 00154 00158 SampledMapping(const Grid<1>& grid, const Array1D<C>& values); 00159 00163 SampledMapping(const Grid<1>& grid, const Function<1,C>& f); 00164 00168 SampledMapping(const MultiIndex<int,1>& a, 00169 const MultiIndex<int,1>& b, 00170 const InfiniteVector<C, MultiIndex<int, 1> >& values, 00171 const int resolution); 00172 00176 SampledMapping(const int a, 00177 const int b, 00178 const InfiniteVector<C, int>& values, 00179 const int resolution); 00180 00188 SampledMapping(const Point<1,C>& a, 00189 const Point<1,C>& b, 00190 const FixedArray1D<Array1D<C>,1>& values); 00191 00198 SampledMapping(const Chart<1>& ch, 00199 const FixedArray1D<Array1D<C>,1>& values, 00200 const unsigned int resolution); 00201 00208 SampledMapping(const Chart<1>& ch, 00209 const unsigned int resolution); 00210 00214 SampledMapping<1,C>& operator = (const SampledMapping<1,C>& sm); 00215 00220 void add(const SampledMapping<1,C>& s); 00221 00226 void add(const C alpha, const SampledMapping<1,C>& s); 00227 00231 void mult(const C alpha); 00232 00236 inline const Array1D<C>& values() const { return values_; } 00237 00241 void matlab_output(std::ostream& os) const; 00242 00246 void gnuplot_output(std::ostream& os) const; 00247 00248 protected: 00252 Array1D<C> values_; 00253 }; 00254 00255 template <class C> 00256 class SampledMapping<2,C> 00257 : public Grid<2> 00258 { 00259 public: 00263 SampledMapping(); 00264 00268 SampledMapping(const SampledMapping<2,C>& sm); 00269 00273 SampledMapping(const Grid<2>& grid); 00274 00279 SampledMapping(const Grid<2>& grid, const Matrix<C>& values); 00280 00284 SampledMapping(const Grid<2>& grid, const Function<2,C>& f); 00285 00291 SampledMapping(const Grid<2>& grid, Function<1,C>& f); 00292 00298 SampledMapping(const MultiIndex<int, 2>& a, 00299 const MultiIndex<int, 2>& b, 00300 const InfiniteVector<C, MultiIndex<int, 2> >& values, 00301 const int resolution); 00302 00309 SampledMapping(const Point<2,C>& a, 00310 const Point<2,C>& b, 00311 const FixedArray1D<Array1D<C>,2>& values); 00312 00319 SampledMapping(const Chart<2>& ch, 00320 const FixedArray1D<Array1D<C>,2>& values, 00321 const unsigned int resolution); 00322 00329 SampledMapping(const Chart<2>& ch, 00330 const unsigned int resolution); 00331 00332 00336 SampledMapping<2,C>& operator = (const SampledMapping<2,C>& sm); 00337 00342 void add(const SampledMapping<2,C>& s); 00343 00348 void add(const C alpha, const SampledMapping<2,C>& s); 00349 00353 void mult(const C alpha); 00354 00358 inline const Matrix<C>& values() const { return values_; } 00359 00363 void matlab_output(std::ostream& os) const; 00364 00368 void gnuplot_output(std::ostream& os) const; 00369 00370 00374 void octave_output(std::ostream& os) const; 00375 00376 protected: 00380 Matrix<C> values_; 00381 }; 00382 00386 template <unsigned int DIM, class C> 00387 void matlab_output(std::ostream& os, 00388 const Array1D<SampledMapping<DIM,C> >& values); 00389 00393 template <unsigned int DIM, class C> 00394 void octave_output(std::ostream& os, 00395 const Array1D<SampledMapping<DIM,C> >& values); 00396 00397 } 00398 00399 #include "geometry/sampled_mapping.cpp" 00400 00401 #endif