field.h

00001 #ifndef FIELD_H
00002 #define FIELD_H
00003 
00004 #include "ddf/ddf.h"
00005 #include "interpolator.h"
00006 #include "afltypes.h"
00007 #include "value.h"
00008 #include "boundary.h"
00009 #include "simplex.h"
00010 #include "integrator.h"
00011 #include "afltypes.h"
00012 #include "exc/aflexc.h"
00013 
00014 namespace afl
00015 {
00016     class Iterator;
00017     class FieldFactory;
00018     class Derivator;
00023     class Field
00024     {
00025         public:
00027             typedef Iterator iterator;
00028 
00030         protected:
00038               Field( const std::string& name, ddf::PropertySet* pset);
00039 
00040         public:
00044               virtual ~Field(  );
00045 
00047         public:
00057              virtual void interpolation( Interpolator* interpolator );
00058 
00073              virtual void interpolation( interp_t method ) = 0;
00074 
00082             virtual void interpolation( const std::string& function );
00083 
00090              virtual void boundary( Boundary* boundary ) throw(exc::GeometryException);
00091 
00096              virtual void derivator( Derivator* derivator );
00097 
00102             virtual void integrator( Integrator* integrator );
00103 
00116              virtual void addBoundarySegment( const Point& p1, const Point& p2 );
00117 
00135              virtual void addBoundarySegment( const Field* f );
00136 
00145              virtual void toXML( std::ostream& doc, const std::string& componentsDir, 
00146                      const std::string& baseURI, bool allInline ) const;
00147 
00153              virtual Value get( const Point& x ) const = 0;
00154 
00159              virtual Derivative jacobian( const Point& x ) const = 0;
00160 
00168              virtual Point gradient( const Point& x ) const = 0;
00169 
00176              virtual data_t divergence( const Point& x ) const = 0;
00177 
00184              virtual data_t  laplacian( const Point& x ) const = 0;
00185 
00193              virtual Point curl( const Point& x ) const;
00194 
00207              virtual Value integral ( const Simplex& s ) const = 0;
00208 
00218              virtual void set( const Point& x, const Value& value ) = 0;
00219 
00233              virtual void set( const Point& x, const Value& value, const Derivative& dvalue ) = 0;
00234              
00238              virtual iterator begin() const;
00239              
00243              virtual iterator end() const;
00244 
00250              virtual void erase( const iterator& pt );
00251 
00256              virtual bool hasDerivative(  ) const;
00257 
00261              virtual size_t size(  ) const;
00262 
00269              virtual size_t getDimension(  ) const = 0;
00270 
00274              virtual const Boundary* getBoundary(  ) const;
00275 
00282              virtual Point getBoundingBoxMin(  ) const = 0;
00283 
00290              virtual Point getBoundingBoxMax(  ) const = 0;
00291 
00296              virtual void resetBoundary(  );
00300              virtual const std::string& getName(  ) const { return _name; }
00301 
00305              virtual const ddf::Geometry* getValueGeometry(  ) const;
00306 
00311              virtual std::string getValueTypeStr(  ) const;
00312 
00318             virtual troolean locate( const Point& p ) const;
00319 
00323             virtual Field* clone(  ) const = 0;
00324 
00331              void setDirichletCondition( const Field* value );
00332              
00338              void setDirichletCondition( const Value& value );
00339 
00344              bool hasDirichletCondition(  ) const;
00345 
00350              Value getDirichlet( const Point& p ) const;
00351 
00359              void setNeumannCondition( const Field* deriv );
00360 
00366              void setNeumannCondition( const Value& value );
00367 
00372              bool hasNeumannCondition(  ) const;
00373 
00378              Value getNeumann( const Point& p ) const;
00379 
00383              const ddf::PropertySet* getNumericData(  ) const { return _pset; } 
00384 
00386         protected:
00387             friend class FieldFactory;
00388             friend class Iterator;
00389 
00391             ddf::PropertySet* _pset;
00392 
00396             std::string _name;
00397 
00401             Interpolator* _interpolator;
00405             Boundary* _boundary;
00409             Derivator* _derivator;
00413             Integrator* _integrator;
00414 
00418             const Field* _dirichlet;
00419 
00423             const Field* _neumann;
00424 
00425     };
00426 
00427 };
00428 
00429 #endif // FIELD_H

Generated on Fri Dec 22 07:17:50 2006 for afl by  doxygen 1.4.6