00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef CH_REALVECT_H
00029 #define CH_REALVECT_H
00030
00031
00032
00033
00034
00035 #include <cstddef>
00036 #include <cstdlib>
00037 #include <cstring>
00038 #include <iostream>
00039
00040 #include "SPACE.H"
00041 #include "Misc.H"
00042 #include "REAL.H"
00043 #include <cassert>
00044 #include "IntVect.H"
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058 class RealVect
00059 {
00060 public:
00061
00063
00065
00069 RealVect ();
00070
00072
00078 RealVect (D_DECL(Real i, Real j, Real k));
00079
00081
00085 RealVect (const RealVect& rhs);
00086
00088
00092 RealVect (const IntVect & iv){
00093 for(int d=0 ; d<SpaceDim ; ++d ){ vect[d] = (Real)iv[d] ; }
00094 }
00096
00100 RealVect& operator= (const RealVect& rhs);
00101
00103
00108 Real& operator[] (int i);
00109
00111
00115 const Real& operator[] (int i) const;
00116
00117
00119
00121
00126 bool operator== (const RealVect& p) const;
00127
00129
00134 bool operator!= (const RealVect& p) const;
00135
00137
00141 RealVect& operator+= (Real s);
00142
00144
00148 RealVect& operator+= (const RealVect& p);
00149
00151
00156 RealVect& operator-= (Real s);
00157
00159
00163 RealVect& operator-= (const RealVect& p);
00164
00166
00171 RealVect operator- (Real s) const;
00172
00174
00179 RealVect& operator*= (Real s);
00180
00182
00186 RealVect& operator*= (const RealVect& p);
00187
00189
00193 RealVect operator* (const RealVect& p) const;
00194
00196
00201 RealVect operator* (Real s) const;
00202
00204
00208 RealVect& operator/= (Real s);
00209
00211
00216 RealVect& operator/= (const RealVect& p);
00217
00219
00223 RealVect operator/ (const RealVect& p) const;
00224
00226
00230 RealVect operator/ (Real s) const;
00231
00233
00236 const Real* dataPtr() const;
00237
00239
00242 Real* dataPtr() ;
00243
00245
00251 friend RealVect BASISREALV(int dir);
00252
00254
00258 static const RealVect Zero;
00259
00261
00265 static const RealVect Unit;
00266
00268
00273 friend RealVect operator+ (Real s,
00274 const RealVect& p);
00275
00277
00281 friend RealVect operator- (Real s,
00282 const RealVect& p);
00283
00285
00290 friend RealVect operator* (Real s,
00291 const RealVect& p);
00293
00298 friend RealVect operator/ (Real s,
00299 const RealVect& p);
00300
00302
00307 friend RealVect operator+ (const RealVect& s,
00308 const RealVect& p);
00309
00311
00315 friend RealVect operator- (const RealVect& s,
00316 const RealVect& p);
00317
00319
00324 friend RealVect operator* (const RealVect& s,
00325 const RealVect& p);
00327
00332 friend RealVect operator/ (const RealVect& s,
00333 const RealVect& p);
00334
00336
00339 friend std::ostream& operator<< (std::ostream& ostr,
00340 const RealVect& p);
00341
00342 friend class HDF5Handle;
00343
00344 static size_t io_offset;
00345 private:
00346
00347 Real vect[SpaceDim];
00348
00349 };
00350
00351 #include "HDF5.H"
00352 #include "SPMD.H"
00353
00354 template < >
00355 int linearSize(const RealVect& vindex);
00356
00357
00358 template < >
00359 void linearIn(RealVect& a_outputT, const void* const inBuf);
00360
00361
00362 template < >
00363 void linearOut(void* const a_outBuf, const RealVect& a_inputT);
00364
00365
00366 #endif
00367