00001 #ifndef COMPOSITEFIELD_H
00002 #define COMPOSITEFIELD_H
00003
00004 #include "field.h"
00005 #include "value.h"
00006
00007 #include <map>
00008 #include <vector>
00009 #include <string>
00010
00011 namespace afl
00012 {
00018 class CompositeField : public Field
00019 {
00020 public:
00028 CompositeField( const std::string& name, std::vector<std::string>& functions, std::vector<const Field*> fs, size_t columns = 1 );
00029
00033 virtual ~CompositeField( );
00034
00036 public:
00042 virtual void interpolation( Interpolator* interpolator );
00043
00049 virtual void interpolation( interp_t method );
00050
00056 virtual void interpolation( const std::string& function );
00057
00070 virtual void addBoundarySegment( const Point& p1, const Point& p2 );
00071
00089 virtual void addBoundarySegment( const Field* f );
00090
00100 virtual void toXML( std::ostream& doc, const std::string& componentsDir,
00101 const std::string& baseURI, bool allInline ) const;
00102
00108 virtual Value get( const Point& x ) const;
00109
00115 virtual Derivative jacobian( const Point& x ) const;
00116
00125 virtual Point gradient( const Point& x ) const;
00126
00134 virtual data_t divergence( const Point& x ) const;
00135
00143 virtual data_t laplacian( const Point& x ) const;
00144
00153 virtual Point curl( const Point& x ) const;
00154
00161 virtual void set( const Point& x, const Value& value );
00162
00170 virtual void set( const Point& x, const Value& value, const Derivative& dvalue );
00171
00178 virtual size_t getDimension( ) const;
00179
00183 virtual const std::string& getName( ) const;
00184
00188 virtual const ddf::Geometry* getValueGeometry( ) const;
00189
00196 virtual Point getBoundingBoxMin( ) const;
00197
00204 virtual Point getBoundingBoxMax( ) const;
00205
00209 virtual Field* clone( ) const;
00210
00223 virtual Value integral ( const Simplex& s ) const;
00224
00229 virtual const Field* find( const std::string& name ) const;
00230
00231 protected:
00232 friend class FieldFactory;
00233
00238 std::string _name;
00239
00243 FnValue _fn;
00244
00248 std::map<std::string, const Field*> _components;
00249
00250 private:
00251 };
00252
00253 };
00254
00255 #endif // COMPOSITEFIELD_H