Go to the documentation of this file.00001
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043 #ifndef MESHVECTORFIELD_HPP
00044 #define MESHVECTORFIELD_HPP 1
00045
00046
00047 #include "transformation.hpp"
00048 #include "vectorfield.hpp"
00049 #include "mesh.hpp"
00050 #include "types.hpp"
00051
00052
00071 class MeshVectorField : public VectorField, public Mesh {
00072
00073 field_extrpl_e _extrpl[6];
00074 double *_F[3];
00080 Transformation _T;
00081 Transformation _Tinv;
00083 void check_definition();
00084
00085 void convert_3d_to_3d( const MeshVectorField &fin );
00086 void convert_cyl_to_3d( const MeshVectorField &fin );
00087
00088 public:
00089
00090
00098 MeshVectorField();
00099
00106 MeshVectorField( const Mesh &m, const bool fout[3] );
00107
00118 MeshVectorField( geom_mode_e geom_mode, const bool fout[3], Int3D size,
00119 Vec3D origo, double h );
00120
00146 MeshVectorField( geom_mode_e geom_mode, const bool fout[3], double xscale,
00147 double fscale, const std::string &filename );
00148
00172 MeshVectorField( geom_mode_e geom_mode, const bool fout[3], Int3D size,
00173 Vec3D origo, double h, const MeshVectorField &fin );
00174
00177 MeshVectorField( const MeshVectorField &f );
00178
00181 MeshVectorField( std::istream &is );
00182
00185 virtual ~MeshVectorField();
00186
00206 void set_extrapolation( const field_extrpl_e extrpl[6] ) {
00207 memcpy( _extrpl, extrpl, 6*sizeof(field_extrpl_e) );
00208 }
00209
00212 void reset_transformation( void );
00213
00216 void set_transformation( const Transformation &T );
00217
00220 void translate( const Vec3D &dx );
00221
00224 void scale( const Vec3D &sx );
00225
00230 void rotate_x( double a );
00231
00238 void rotate_y( double a );
00239
00244 void rotate_z( double a );
00245
00248 void clear();
00249
00256 void reset( geom_mode_e geom_mode, const bool fout[3], Int3D size,
00257 Vec3D origo, double h );
00258
00262 void get_minmax( double &min, double &max ) const;
00263
00266 void get_defined_components( bool fout[3] ) const;
00267
00270 MeshVectorField &operator=( const MeshVectorField &f );
00271
00274 MeshVectorField &operator+=( const MeshVectorField &f );
00275
00278 MeshVectorField &operator*=( double x );
00279
00282 MeshVectorField &operator/=( double x );
00283
00286 const Vec3D operator()( int32_t i ) const;
00287
00290 const Vec3D operator()( int32_t i, int32_t j ) const;
00291
00294 const Vec3D operator()( int32_t i, int32_t j, int32_t k ) const;
00295
00298 void set( int32_t i, const Vec3D &v );
00299
00302 void set( int32_t i, int32_t j, const Vec3D &v );
00303
00306 void set( int32_t i, int32_t j, int32_t k, const Vec3D &v );
00307
00311 virtual const Vec3D operator()( Vec3D x ) const;
00312
00315 void save( const std::string &filename ) const;
00316
00319 void save( std::ostream &os ) const;
00320
00323 void debug_print( std::ostream &os ) const;
00324 };
00325
00326
00327 #endif
00328