OSHUN  beta
Arbitrary Order Spherical-Harmonic 1D-3P Vlasov-Fokker-Planck-Maxwell code
Array3D< T > Class Template Reference

#include <lib-array.h>

Public Member Functions

 Array3D (size_t x, size_t y, size_t z)
 
 Array3D (const Array3D &other)
 
 ~Array3D ()
 
size_t dim () const
 
size_t dim1 () const
 
size_t dim2 () const
 
size_t dim3 () const
 
valarray< T > & array () const
 
T & operator() (size_t i, size_t j, size_t k)
 
operator() (size_t i, size_t j, size_t k) const
 
T & operator() (size_t i)
 
operator() (size_t i) const
 
GSlice_iter< T > d1c (size_t b, size_t e)
 
GSlice_iter< T > d2c (size_t b, size_t e)
 
GSlice_iter< T > d3c (size_t b, size_t e)
 
GSlice_iter< T > SubArray3D (size_t st, size_t nx, size_t ny, size_t nz)
 
CGSlice_iter< T > d1c (size_t b, size_t e) const
 
CGSlice_iter< T > d2c (size_t b, size_t e) const
 
CGSlice_iter< T > d3c (size_t b, size_t e) const
 
CGSlice_iter< T > SubArray3D (size_t st, size_t nx, size_t ny, size_t nz) const
 
Array3Doperator= (const T &d)
 
Array3Doperator= (const Array3D &other)
 
Array3Doperator*= (const T &d)
 
Array3Doperator*= (const Array3D &vmulti)
 
Array3Doperator+= (const T &d)
 
Array3Doperator+= (const Array3D &vadd)
 
Array3Doperator-= (const T &d)
 
Array3Doperator-= (const Array3D &vmin)
 
Array3Dmultid1 (const valarray< T > &vmulti)
 
Array3Dmultid2 (const valarray< T > &vmulti)
 
Array3Dmultid3 (const valarray< T > &vmulti)
 
Array3Dmultid2d3 (const Array2D< T > &vd2d3)
 
Array3DDd1 ()
 
Array3DDd2 ()
 
Array3DDd3 ()
 
Array3DFilterd1 (size_t N)
 

Private Attributes

valarray< T > * v
 
size_t d1
 
size_t d2
 
size_t d3
 
size_t d1d2
 

Detailed Description

template<class T>
class Array3D< T >

Definition at line 1036 of file lib-array.h.

Constructor & Destructor Documentation

◆ Array3D() [1/2]

template<class T >
Array3D< T >::Array3D ( size_t  x,
size_t  y,
size_t  z 
)

Definition at line 1112 of file lib-array.h.

Referenced by Array3D< complex< double > >::array().

1112  : d1(x), d2(y), d3(z) {
1113  v = new valarray<T>(d1*d2*d3);
1114  d1d2 = d1*d2;
1115 }
size_t d3
Definition: lib-array.h:1042
size_t d1
Definition: lib-array.h:1042
size_t d2
Definition: lib-array.h:1042
valarray< T > * v
Definition: lib-array.h:1041
size_t d1d2
Definition: lib-array.h:1043
Here is the caller graph for this function:

◆ Array3D() [2/2]

template<class T >
Array3D< T >::Array3D ( const Array3D< T > &  other)

Definition at line 1117 of file lib-array.h.

1117  {
1118  d1 = other.dim1();
1119  d2 = other.dim2();
1120  d3 = other.dim3();
1121  d1d2 = d1*d2;
1122  v = new valarray<T>(d1*d2*d3);
1123  (*v) = other.array();
1124 }
valarray< T > & array() const
Definition: lib-array.h:1056
size_t dim3() const
Definition: lib-array.h:1055
size_t d3
Definition: lib-array.h:1042
size_t dim2() const
Definition: lib-array.h:1054
size_t dim1() const
Definition: lib-array.h:1053
size_t d1
Definition: lib-array.h:1042
size_t d2
Definition: lib-array.h:1042
valarray< T > * v
Definition: lib-array.h:1041
size_t d1d2
Definition: lib-array.h:1043

◆ ~Array3D()

template<class T >
Array3D< T >::~Array3D ( )

Definition at line 1126 of file lib-array.h.

1126  {
1127  delete v;
1128 }
valarray< T > * v
Definition: lib-array.h:1041

Member Function Documentation

◆ array()

◆ d1c() [1/2]

template<class T >
GSlice_iter< T > Array3D< T >::d1c ( size_t  b,
size_t  e 
)
inline

Definition at line 1162 of file lib-array.h.

Referenced by Array3D_cmplx< T >::array().

1162  {
1163  valarray<size_t> sz(3), str(3);
1164  str[2] = d1; str[1] = d1d2; str[0] = 1;
1165  sz[2] = d2; sz[1] = d3; sz[0] = e-b+1;
1166  return GSlice_iter<T>(v,gslice(b,sz,str));
1167 }
size_t d3
Definition: lib-array.h:1042
size_t d1
Definition: lib-array.h:1042
size_t d2
Definition: lib-array.h:1042
valarray< T > * v
Definition: lib-array.h:1041
size_t d1d2
Definition: lib-array.h:1043
Here is the caller graph for this function:

◆ d1c() [2/2]

template<class T >
CGSlice_iter< T > Array3D< T >::d1c ( size_t  b,
size_t  e 
) const
inline

Definition at line 1170 of file lib-array.h.

1170  {
1171  valarray<size_t> sz(3), str(3);
1172  str[2] = d1; str[1] = d1d2; str[0] = 1;
1173  sz[2] = d2; sz[1] = d3; sz[0] = e-b+1;
1174  return CGSlice_iter<T>(v,gslice(b,sz,str));
1175 }
size_t d3
Definition: lib-array.h:1042
size_t d1
Definition: lib-array.h:1042
size_t d2
Definition: lib-array.h:1042
valarray< T > * v
Definition: lib-array.h:1041
size_t d1d2
Definition: lib-array.h:1043

◆ d2c() [1/2]

template<class T >
GSlice_iter< T > Array3D< T >::d2c ( size_t  b,
size_t  e 
)
inline

Definition at line 1178 of file lib-array.h.

Referenced by Array3D_cmplx< T >::array().

1178  {
1179  valarray<size_t> sz(3), str(3);
1180  str[2] = 1; str[1] = d1d2; str[0] = d1;
1181  sz[2] = d1; sz[1] = d3; sz[0] = e-b+1;
1182  return GSlice_iter<T>(v,gslice(d1*b,sz,str));
1183 }
size_t d3
Definition: lib-array.h:1042
size_t d1
Definition: lib-array.h:1042
valarray< T > * v
Definition: lib-array.h:1041
size_t d1d2
Definition: lib-array.h:1043
Here is the caller graph for this function:

◆ d2c() [2/2]

template<class T >
CGSlice_iter< T > Array3D< T >::d2c ( size_t  b,
size_t  e 
) const
inline

Definition at line 1186 of file lib-array.h.

1186  {
1187  valarray<size_t> sz(3), str(3);
1188  str[2] = 1; str[1] = d1d2; str[0] = d1;
1189  sz[2] = d1; sz[1] = d3; sz[0] = e-b+1;
1190  return CGSlice_iter<T>(v,gslice(d1*b,sz,str));
1191 }
size_t d3
Definition: lib-array.h:1042
size_t d1
Definition: lib-array.h:1042
valarray< T > * v
Definition: lib-array.h:1041
size_t d1d2
Definition: lib-array.h:1043

◆ d3c() [1/2]

template<class T >
GSlice_iter< T > Array3D< T >::d3c ( size_t  b,
size_t  e 
)
inline

Definition at line 1194 of file lib-array.h.

Referenced by Array3D_cmplx< T >::array().

1194  {
1195  valarray<size_t> sz(2), str(2);
1196  str[1] = 1; str[0] = d1d2;
1197  sz[1] = d1d2; sz[0] = e-b+1;
1198  return GSlice_iter<T>(v,gslice(d1d2*b,sz,str));
1199 }
valarray< T > * v
Definition: lib-array.h:1041
size_t d1d2
Definition: lib-array.h:1043
Here is the caller graph for this function:

◆ d3c() [2/2]

template<class T >
CGSlice_iter< T > Array3D< T >::d3c ( size_t  b,
size_t  e 
) const
inline

Definition at line 1202 of file lib-array.h.

1202  {
1203  valarray<size_t> sz(2), str(2);
1204  str[1] = 1; str[0] = d1d2;
1205  sz[1] = d1d2; sz[0] = e-b+1;
1206  return CGSlice_iter<T>(v,gslice(d1d2*b,sz,str));
1207 }
valarray< T > * v
Definition: lib-array.h:1041
size_t d1d2
Definition: lib-array.h:1043

◆ Dd1()

template<class T >
Array3D< T > & Array3D< T >::Dd1 ( )

Definition at line 1325 of file lib-array.h.

Referenced by Array3D_cmplx< T >::array().

1325  {
1326  for(long i(0); i< d1*d2*d3-2; ++i) {
1327  (*v)[i] -= (*v)[i+2];
1328  }
1329  for(long i(d1*d2*d3-3); i>-1; --i) {
1330  (*v)[i+1] = (*v)[i];
1331  }
1332  return *this;
1333 }
size_t d3
Definition: lib-array.h:1042
size_t d1
Definition: lib-array.h:1042
size_t d2
Definition: lib-array.h:1042
Here is the caller graph for this function:

◆ Dd2()

template<class T >
Array3D< T > & Array3D< T >::Dd2 ( )

Definition at line 1336 of file lib-array.h.

Referenced by Array3D_cmplx< T >::array().

1336  {
1337  long twod1 = 2*d1;
1338  for(long i(0); i< d1*d2*d3-twod1; ++i) {
1339  (*v)[i] -= (*v)[i+twod1];
1340  }
1341  for(long i(d1*d2*d3-twod1-1); i>-1; --i) {
1342  (*v)[i+d1] = (*v)[i];
1343  }
1344  return *this;
1345 }
size_t d3
Definition: lib-array.h:1042
size_t d1
Definition: lib-array.h:1042
size_t d2
Definition: lib-array.h:1042
Here is the caller graph for this function:

◆ Dd3()

template<class T >
Array3D< T > & Array3D< T >::Dd3 ( )

Definition at line 1348 of file lib-array.h.

Referenced by Array3D_cmplx< T >::array().

1348  {
1349  long twod1d2 = 2*d1d2;
1350  for(long i(0); i< d1*d2*d3-twod1d2; ++i) {
1351  (*v)[i] -= (*v)[i+twod1d2];
1352  }
1353  for(long i(d1*d2*d3-twod1d2-1); i>-1; --i) {
1354  (*v)[i+d1d2] = (*v)[i];
1355  }
1356  return *this;
1357 }
size_t d3
Definition: lib-array.h:1042
size_t d1
Definition: lib-array.h:1042
size_t d2
Definition: lib-array.h:1042
size_t d1d2
Definition: lib-array.h:1043
Here is the caller graph for this function:

◆ dim()

template<class T>
size_t Array3D< T >::dim ( ) const
inline

Definition at line 1052 of file lib-array.h.

1052 {return d1*d2*d3;}
size_t d3
Definition: lib-array.h:1042
size_t d1
Definition: lib-array.h:1042
size_t d2
Definition: lib-array.h:1042

◆ dim1()

template<class T>
size_t Array3D< T >::dim1 ( ) const
inline

Definition at line 1053 of file lib-array.h.

Referenced by Array3D< complex< double > >::Array3D(), Export_Files::Xport::Export_h5(), and Array3D< complex< double > >::SubArray3D().

1053 {return d1;}
size_t d1
Definition: lib-array.h:1042
Here is the caller graph for this function:

◆ dim2()

template<class T>
size_t Array3D< T >::dim2 ( ) const
inline

Definition at line 1054 of file lib-array.h.

Referenced by Array3D< complex< double > >::Array3D(), and Export_Files::Xport::Export_h5().

1054 {return d2;}
size_t d2
Definition: lib-array.h:1042
Here is the caller graph for this function:

◆ dim3()

template<class T>
size_t Array3D< T >::dim3 ( ) const
inline

Definition at line 1055 of file lib-array.h.

Referenced by Array3D< complex< double > >::Array3D(), and Export_Files::Xport::Export_h5().

1055 {return d3;}
size_t d3
Definition: lib-array.h:1042
Here is the caller graph for this function:

◆ Filterd1()

template<class T >
Array3D< T > & Array3D< T >::Filterd1 ( size_t  N)

Definition at line 1361 of file lib-array.h.

Referenced by Array3D_cmplx< T >::array().

1361  {
1362  for (size_t j(0); j < d2*d3; ++j ){
1363  for (size_t i(j*d1); i< j*d1+N; ++i ){
1364  (*v)[i] = 0.0;
1365  }
1366  }
1367  return *this;
1368 }
size_t d3
Definition: lib-array.h:1042
size_t d1
Definition: lib-array.h:1042
size_t d2
Definition: lib-array.h:1042
Here is the caller graph for this function:

◆ multid1()

template<class T>
Array3D< T > & Array3D< T >::multid1 ( const valarray< T > &  vmulti)

Definition at line 1278 of file lib-array.h.

Referenced by Array3D_cmplx< T >::array().

1278  {
1279  for (size_t j(0); j< d1*d2*d3; j+=d1 ){
1280  for (size_t i(0); i< d1; ++i ){
1281  (*v)[i+j] *= vmulti[i];
1282  }
1283  }
1284  return *this;
1285 }
size_t d3
Definition: lib-array.h:1042
size_t d1
Definition: lib-array.h:1042
size_t d2
Definition: lib-array.h:1042
Here is the caller graph for this function:

◆ multid2()

template<class T>
Array3D< T > & Array3D< T >::multid2 ( const valarray< T > &  vmulti)

Definition at line 1288 of file lib-array.h.

Referenced by Array3D_cmplx< T >::array().

1288  {
1289  for (size_t k(0); k< d3*d2*d1; k+=d1*d2 ) {
1290  for (size_t j(0); j< d2; ++j ) {
1291  for (size_t i(j*d1); i< (j+1)*d1; ++i ){
1292  (*v)[i+k] *= vmulti[j];
1293  }
1294  }
1295  }
1296  return *this;
1297 }
size_t d3
Definition: lib-array.h:1042
size_t d1
Definition: lib-array.h:1042
size_t d2
Definition: lib-array.h:1042
Here is the caller graph for this function:

◆ multid2d3()

template<class T>
Array3D< T > & Array3D< T >::multid2d3 ( const Array2D< T > &  vd2d3)

Definition at line 1311 of file lib-array.h.

Referenced by Array3D_cmplx< T >::array().

1311  {
1312  for (size_t j(0); j < d2*d3; ++j ){
1313  for (size_t i(j*d1); i< (j+1)*d1; ++i ){
1314  (*v)[i] *= vd2d3.array()[j];
1315  }
1316  }
1317  return *this;
1318 }
size_t d3
Definition: lib-array.h:1042
size_t d1
Definition: lib-array.h:1042
valarray< T > & array() const
Definition: lib-array.h:291
size_t d2
Definition: lib-array.h:1042
Here is the caller graph for this function:

◆ multid3()

template<class T>
Array3D< T > & Array3D< T >::multid3 ( const valarray< T > &  vmulti)

Definition at line 1300 of file lib-array.h.

Referenced by Array3D_cmplx< T >::array().

1300  {
1301  for (size_t k(0); k< d3; ++k) {
1302  for (size_t i(k*d1*d2); i< (k+1)*d1*d2; ++i ){
1303  (*v)[i] *= vmulti[k];
1304  }
1305  }
1306  return *this;
1307 }
size_t d3
Definition: lib-array.h:1042
size_t d1
Definition: lib-array.h:1042
size_t d2
Definition: lib-array.h:1042
Here is the caller graph for this function:

◆ operator()() [1/4]

template<class T >
T & Array3D< T >::operator() ( size_t  i,
size_t  j,
size_t  k 
)
inline

Definition at line 1136 of file lib-array.h.

1136  {
1137  return (*v)[i+j*d1+k*d1d2];
1138 }
size_t d1
Definition: lib-array.h:1042
valarray< T > * v
Definition: lib-array.h:1041
size_t d1d2
Definition: lib-array.h:1043

◆ operator()() [2/4]

template<class T >
T Array3D< T >::operator() ( size_t  i,
size_t  j,
size_t  k 
) const
inline

Definition at line 1142 of file lib-array.h.

1142  {
1143  return (*v)[i+j*d1+k*d1d2];
1144 }
size_t d1
Definition: lib-array.h:1042
valarray< T > * v
Definition: lib-array.h:1041
size_t d1d2
Definition: lib-array.h:1043

◆ operator()() [3/4]

template<class T >
T & Array3D< T >::operator() ( size_t  i)
inline

Definition at line 1148 of file lib-array.h.

1148  {
1149  return (*v)[i];
1150 }
valarray< T > * v
Definition: lib-array.h:1041

◆ operator()() [4/4]

template<class T >
T Array3D< T >::operator() ( size_t  i) const
inline

Definition at line 1154 of file lib-array.h.

1154  {
1155  return (*v)[i];
1156 }
valarray< T > * v
Definition: lib-array.h:1041

◆ operator*=() [1/2]

template<class T>
Array3D< T > & Array3D< T >::operator*= ( const T &  d)

Definition at line 1246 of file lib-array.h.

Referenced by Array3D_cmplx< T >::array().

1246  {
1247  (*v) *=d;
1248  return *this;
1249 }
Here is the caller graph for this function:

◆ operator*=() [2/2]

template<class T>
Array3D< T > & Array3D< T >::operator*= ( const Array3D< T > &  vmulti)

Definition at line 1250 of file lib-array.h.

1250  {
1251  (*v) *= vmulti.array();
1252  return *this;
1253 }
valarray< T > & array() const
Definition: lib-array.h:1056

◆ operator+=() [1/2]

template<class T>
Array3D< T > & Array3D< T >::operator+= ( const T &  d)

Definition at line 1256 of file lib-array.h.

Referenced by Array3D_cmplx< T >::array().

1256  {
1257  (*v) +=d;
1258  return *this;
1259 }
Here is the caller graph for this function:

◆ operator+=() [2/2]

template<class T>
Array3D< T > & Array3D< T >::operator+= ( const Array3D< T > &  vadd)

Definition at line 1260 of file lib-array.h.

1260  {
1261  (*v) += vadd.array();
1262  return *this;
1263 }
valarray< T > & array() const
Definition: lib-array.h:1056

◆ operator-=() [1/2]

template<class T>
Array3D< T > & Array3D< T >::operator-= ( const T &  d)

Definition at line 1266 of file lib-array.h.

Referenced by Array3D_cmplx< T >::array().

1266  {
1267  (*v) -=d;
1268  return *this;
1269 }
Here is the caller graph for this function:

◆ operator-=() [2/2]

template<class T>
Array3D< T > & Array3D< T >::operator-= ( const Array3D< T > &  vmin)

Definition at line 1270 of file lib-array.h.

1270  {
1271  (*v) -= vmin.array();
1272  return *this;
1273 }
valarray< T > & array() const
Definition: lib-array.h:1056

◆ operator=() [1/2]

template<class T>
Array3D< T > & Array3D< T >::operator= ( const T &  d)

Definition at line 1233 of file lib-array.h.

Referenced by Array3D_cmplx< T >::array().

1233  {
1234  (*v) = d;
1235  return *this;
1236 }
Here is the caller graph for this function:

◆ operator=() [2/2]

template<class T>
Array3D< T > & Array3D< T >::operator= ( const Array3D< T > &  other)

Definition at line 1238 of file lib-array.h.

1238  {
1239  if (this != &other) { //self-assignment
1240  (*v) = other.array();
1241  }
1242  return *this;
1243 }
valarray< T > & array() const
Definition: lib-array.h:1056

◆ SubArray3D() [1/2]

template<class T >
GSlice_iter< T > Array3D< T >::SubArray3D ( size_t  st,
size_t  nx,
size_t  ny,
size_t  nz 
)
inline

Definition at line 1212 of file lib-array.h.

Referenced by Array3D_cmplx< T >::array().

1212  {
1213  valarray<size_t> sz(3), str(3);
1214  str[2] = 1; str[1] = dim1(); str[0] = d1d2;
1215  sz[2] = nx; sz[1] = ny; sz[0] = nz;
1216  return GSlice_iter<T>(v,gslice(st,sz,str));
1217 }
size_t dim1() const
Definition: lib-array.h:1053
valarray< T > * v
Definition: lib-array.h:1041
size_t d1d2
Definition: lib-array.h:1043
Here is the caller graph for this function:

◆ SubArray3D() [2/2]

template<class T >
CGSlice_iter< T > Array3D< T >::SubArray3D ( size_t  st,
size_t  nx,
size_t  ny,
size_t  nz 
) const
inline

Definition at line 1221 of file lib-array.h.

1221  {
1222  valarray<size_t> sz(3), str(3);
1223  str[2] = 1; str[1] = dim1(); str[0] = d1d2;
1224  sz[2] = nx; sz[1] = ny; sz[0] = nz;
1225  return CGSlice_iter<T>(v,gslice(st,sz,str));
1226 }
size_t dim1() const
Definition: lib-array.h:1053
valarray< T > * v
Definition: lib-array.h:1041
size_t d1d2
Definition: lib-array.h:1043

Field Documentation

◆ d1

◆ d1d2

◆ d2

◆ d3

◆ v


The documentation for this class was generated from the following file: