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