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
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& operator= (const RealVect& rhs);
00093
00095
00100 Real& operator[] (int i);
00101
00103
00107 const Real& operator[] (int i) const;
00108
00109
00111
00113
00118 bool operator== (const RealVect& p) const;
00119
00121
00126 bool operator!= (const RealVect& p) const;
00127
00129
00133 RealVect& operator+= (Real s);
00134
00136
00140 RealVect& operator+= (const RealVect& p);
00141
00143
00148 RealVect& operator-= (Real s);
00149
00151
00155 RealVect& operator-= (const RealVect& p);
00156
00158
00161 RealVect operator- (const RealVect& p) const;
00162
00164
00169 RealVect operator- (Real s) const;
00170
00172
00177 RealVect& operator*= (Real s);
00178
00180
00184 RealVect& operator*= (const RealVect& p);
00185
00187
00191 RealVect operator* (const RealVect& p) const;
00192
00194
00199 RealVect operator* (Real s) const;
00200
00202
00206 RealVect& operator/= (Real s);
00207
00209
00214 RealVect& operator/= (const RealVect& p);
00215
00217
00221 RealVect operator/ (const RealVect& p) const;
00222
00224
00228 RealVect operator/ (Real s) const;
00229
00231
00234 const Real* dataPtr() const;
00235
00237
00243 friend RealVect BASISREALV(int dir);
00244
00246
00250 static const RealVect Zero;
00251
00253
00257 static const RealVect Unit;
00258
00260
00265 friend RealVect operator+ (Real s,
00266 const RealVect& p);
00267
00269
00273 friend RealVect operator- (Real s,
00274 const RealVect& p);
00275
00277
00282 friend RealVect operator* (Real s,
00283 const RealVect& p);
00285
00290 friend RealVect operator/ (Real s,
00291 const RealVect& p);
00292
00294
00299 friend RealVect operator+ (const RealVect& s,
00300 const RealVect& p);
00301
00303
00307 friend RealVect operator- (const RealVect& s,
00308 const RealVect& p);
00309
00311
00316 friend RealVect operator* (const RealVect& s,
00317 const RealVect& p);
00319
00324 friend RealVect operator/ (const RealVect& s,
00325 const RealVect& p);
00326
00327 friend class HDF5Handle;
00328
00329 static size_t io_offset;
00330 private:
00331
00332 Real vect[SpaceDim];
00333
00334 };
00335
00336 #include "HDF5.H"
00337 #include "SPMD.H"
00338
00339 template < >
00340 int linearSize(const RealVect& vindex);
00341
00342
00343 template < >
00344 void linearIn(RealVect& a_outputT, const void* const inBuf);
00345
00346
00347 template < >
00348 void linearOut(void* const a_outBuf, const RealVect& a_inputT);
00349
00350
00351 #endif
00352