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

#include <lib-array.h>

Public Member Functions

 Array4D_cmplx (size_t x, size_t y, size_t z, size_t w)
 
 Array4D_cmplx (const Array4D_cmplx &other)
 
 ~Array4D_cmplx ()
 
size_t dim () const
 
size_t dim1 () const
 
size_t dim2 () const
 
size_t dim3 () const
 
size_t dim4 () const
 
valarray< T > & array () const
 
T & operator[] (size_t i)
 
operator[] (size_t i) const
 
T & real (size_t i, size_t j, size_t k, size_t l)
 
real (size_t i, size_t j, size_t k, size_t l) const
 
T & imag (size_t i, size_t j, size_t k, size_t l)
 
imag (size_t i, size_t j, size_t k, size_t l) 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 > d4c (size_t b, size_t e)
 
GSlice_iter< T > SubArray4D (size_t st, size_t nx, size_t ny, size_t nz, size_t nw)
 
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 > d4c (size_t b, size_t e) const
 
CGSlice_iter< T > SubArray4D (size_t st, size_t nx, size_t ny, size_t nz, size_t nw) const
 
Array4D_cmplxoperator= (const T &d)
 
Array4D_cmplxoperator= (const complex< T > &c)
 
Array4D_cmplxoperator= (const Array4D< T > &other)
 
Array4D_cmplxoperator= (const Array4D_cmplx &other)
 
Array4D_cmplxoperator*= (const T &d)
 
Array4D_cmplxoperator*= (const complex< T > &c)
 
Array4D_cmplxoperator*= (const Array4D< T > &vmulti)
 
Array4D_cmplxoperator*= (const Array4D_cmplx &vmulti)
 
Array4D_cmplxoperator+= (const T &d)
 
Array4D_cmplxoperator+= (const complex< T > &c)
 
Array4D_cmplxoperator+= (const Array4D< T > &vadd)
 
Array4D_cmplxoperator+= (const Array4D_cmplx &vadd)
 
Array4D_cmplxoperator-= (const T &d)
 
Array4D_cmplxoperator-= (const complex< T > &c)
 
Array4D_cmplxoperator-= (const Array4D< T > &vmin)
 
Array4D_cmplxoperator-= (const Array4D_cmplx &vmin)
 
Array4D_cmplxmultid1 (const valarray< T > &vmulti)
 
Array4D_cmplxmultid1 (const valarray< complex< T > > &vmulti)
 
Array4D_cmplxmultid2 (const valarray< T > &vmulti)
 
Array4D_cmplxmultid2 (const valarray< complex< T > > &vmulti)
 
Array4D_cmplxmultid3 (const valarray< T > &vmulti)
 
Array4D_cmplxmultid3 (const valarray< complex< T > > &vmulti)
 
Array4D_cmplxmultid4 (const valarray< T > &vmulti)
 
Array4D_cmplxmultid4 (const valarray< complex< T > > &vmulti)
 
Array4D_cmplxmultid2d3d4 (const Array3D< T > &vd2d3d4)
 
Array4D_cmplxmultid2d3d4 (const Array3D_cmplx< T > &vd2d3d4)
 
Array4D_cmplxDd1 ()
 
Array4D_cmplxDd2 ()
 
Array4D_cmplxDd3 ()
 
Array4D_cmplxDd4 ()
 
Array4D_cmplxFilterd1 (size_t N)
 

Private Attributes

valarray< T > * v
 
size_t d1
 
size_t d2
 
size_t d3
 
size_t d4
 
size_t td1
 
size_t td1d2
 
size_t td1d2d3
 

Detailed Description

template<class T>
class Array4D_cmplx< T >

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

Constructor & Destructor Documentation

◆ Array4D_cmplx() [1/2]

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

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

References Array4D_cmplx< T >::d1, Array4D_cmplx< T >::d2, Array4D_cmplx< T >::d3, Array4D_cmplx< T >::d4, Array4D_cmplx< T >::td1, Array4D_cmplx< T >::td1d2, Array4D_cmplx< T >::td1d2d3, and Array4D_cmplx< T >::v.

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

2387  : d1(x), d2(y), d3(z), d4(w) {
2388  v = new valarray<T>(2*d1*d2*d3*d4);
2389  td1 = 2*d1;
2390  td1d2 = 2*d1*d2;
2391  td1d2d3 = 2*d1*d2*d3;
2392 }
valarray< T > * v
Definition: lib-array.h:2294
size_t td1d2
Definition: lib-array.h:2297
size_t td1d2d3
Definition: lib-array.h:2298
Here is the caller graph for this function:

◆ Array4D_cmplx() [2/2]

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

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

References Array4D_cmplx< T >::array(), Array4D_cmplx< T >::d1, Array4D_cmplx< T >::d2, Array4D_cmplx< T >::d3, Array4D_cmplx< T >::d4, Array4D_cmplx< T >::dim1(), Array4D_cmplx< T >::dim2(), Array4D_cmplx< T >::dim3(), Array4D_cmplx< T >::dim4(), Array4D_cmplx< T >::td1, Array4D_cmplx< T >::td1d2, Array4D_cmplx< T >::td1d2d3, and Array4D_cmplx< T >::v.

2394  {
2395  d1 = other.dim1();
2396  d2 = other.dim2();
2397  d3 = other.dim3();
2398  d4 = other.dim4();
2399  td1 = 2*d1;
2400  td1d2 = 2*d1*d2;
2401  td1d2d3 = 2*d1*d2*d3;
2402  v = new valarray<T>(2*d1*d2*d3*d4);
2403  (*v) = other.array();
2404 }
size_t dim1() const
Definition: lib-array.h:2308
size_t dim3() const
Definition: lib-array.h:2310
valarray< T > * v
Definition: lib-array.h:2294
size_t dim2() const
Definition: lib-array.h:2309
size_t dim4() const
Definition: lib-array.h:2311
size_t td1d2
Definition: lib-array.h:2297
valarray< T > & array() const
Definition: lib-array.h:2312
size_t td1d2d3
Definition: lib-array.h:2298
Here is the call graph for this function:

◆ ~Array4D_cmplx()

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

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

References Array4D_cmplx< T >::v.

2406  {
2407  delete v;
2408 }
valarray< T > * v
Definition: lib-array.h:2294

Member Function Documentation

◆ array()

◆ d1c() [1/2]

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

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

References Array4D_cmplx< T >::d2, Array4D_cmplx< T >::d3, Array4D_cmplx< T >::d4, Array4D_cmplx< T >::td1, Array4D_cmplx< T >::td1d2, Array4D_cmplx< T >::td1d2d3, and Array4D_cmplx< T >::v.

2443  {
2444  valarray<size_t> sz(5), str(5);
2445  str[4] = 1, str[3] = td1; str[2] = td1d2; str[1] = td1d2d3; str[0] = 2;
2446  sz[4] = 2, sz[3] = d2; sz[2] = d3; sz[1] = d4; sz[0] = e-b+1;
2447  return GSlice_iter<T>(v,gslice(2*b,sz,str));
2448 }
valarray< T > * v
Definition: lib-array.h:2294
size_t td1d2
Definition: lib-array.h:2297
size_t td1d2d3
Definition: lib-array.h:2298

◆ d1c() [2/2]

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

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

References Array4D_cmplx< T >::d2, Array4D_cmplx< T >::d3, Array4D_cmplx< T >::d4, Array4D_cmplx< T >::td1, Array4D_cmplx< T >::td1d2, Array4D_cmplx< T >::td1d2d3, and Array4D_cmplx< T >::v.

2451  {
2452  valarray<size_t> sz(5), str(5);
2453  str[4] = 1, str[3] = td1; str[2] = td1d2; str[1] = td1d2d3; str[0] = 2;
2454  sz[4] = 2, sz[3] = d2; sz[2] = d3; sz[1] = d4; sz[0] = e-b+1;
2455  return CGSlice_iter<T>(v,gslice(2*b,sz,str));
2456 }
valarray< T > * v
Definition: lib-array.h:2294
size_t td1d2
Definition: lib-array.h:2297
size_t td1d2d3
Definition: lib-array.h:2298

◆ d2c() [1/2]

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

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

References Array4D_cmplx< T >::d3, Array4D_cmplx< T >::d4, Array4D_cmplx< T >::td1, Array4D_cmplx< T >::td1d2, Array4D_cmplx< T >::td1d2d3, and Array4D_cmplx< T >::v.

2459  {
2460  valarray<size_t> sz(4), str(4);
2461  str[3] = 1; str[2] = td1d2; str[1] = td1d2d3; str[0] = td1;
2462  sz[3] = td1; sz[2] = d3; sz[1] = d4; sz[0] = e-b+1;
2463  return GSlice_iter<T>(v,gslice(b*td1,sz,str));
2464 }
valarray< T > * v
Definition: lib-array.h:2294
size_t td1d2
Definition: lib-array.h:2297
size_t td1d2d3
Definition: lib-array.h:2298

◆ d2c() [2/2]

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

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

References Array4D_cmplx< T >::d3, Array4D_cmplx< T >::d4, Array4D_cmplx< T >::td1, Array4D_cmplx< T >::td1d2, Array4D_cmplx< T >::td1d2d3, and Array4D_cmplx< T >::v.

2467  {
2468  valarray<size_t> sz(4), str(4);
2469  str[3] = 1; str[2] = td1d2; str[1] = td1d2d3; str[0] = td1;
2470  sz[3] = td1; sz[2] = d3; sz[1] = d4; sz[0] = e-b+1;
2471  return CGSlice_iter<T>(v,gslice(b*td1,sz,str));
2472 }
valarray< T > * v
Definition: lib-array.h:2294
size_t td1d2
Definition: lib-array.h:2297
size_t td1d2d3
Definition: lib-array.h:2298

◆ d3c() [1/2]

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

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

References Array4D_cmplx< T >::d4, Array4D_cmplx< T >::td1d2, Array4D_cmplx< T >::td1d2d3, and Array4D_cmplx< T >::v.

2475  {
2476  valarray<size_t> sz(3), str(3);
2477  str[2] = 1; str[1] = td1d2d3; str[0] = td1d2;
2478  sz[2] = td1d2; sz[1] = d4; sz[0] = e-b+1;
2479  return GSlice_iter<T>(v,gslice(b*td1d2,sz,str));
2480 }
valarray< T > * v
Definition: lib-array.h:2294
size_t td1d2
Definition: lib-array.h:2297
size_t td1d2d3
Definition: lib-array.h:2298

◆ d3c() [2/2]

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

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

References Array4D_cmplx< T >::d4, Array4D_cmplx< T >::td1d2, Array4D_cmplx< T >::td1d2d3, and Array4D_cmplx< T >::v.

2483  {
2484  valarray<size_t> sz(3), str(3);
2485  str[2] = 1; str[1] = td1d2d3; str[0] = td1d2;
2486  sz[2] = td1d2; sz[1] = d4; sz[0] = e-b+1;
2487  return CGSlice_iter<T>(v,gslice(b*td1d2,sz,str));
2488 }
valarray< T > * v
Definition: lib-array.h:2294
size_t td1d2
Definition: lib-array.h:2297
size_t td1d2d3
Definition: lib-array.h:2298

◆ d4c() [1/2]

template<class T >
GSlice_iter< T > Array4D_cmplx< T >::d4c ( size_t  b,
size_t  e 
)
inline

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

References Array4D_cmplx< T >::td1d2d3, and Array4D_cmplx< T >::v.

2491  {
2492  valarray<size_t> sz(2), str(2);
2493  str[1] = 1; str[0] = td1d2d3;
2494  sz[1] = td1d2d3; sz[0] = e-b+1;
2495  return GSlice_iter<T>(v,gslice(b*td1d2d3,sz,str));
2496 }
valarray< T > * v
Definition: lib-array.h:2294
size_t td1d2d3
Definition: lib-array.h:2298

◆ d4c() [2/2]

template<class T >
CGSlice_iter< T > Array4D_cmplx< T >::d4c ( size_t  b,
size_t  e 
) const
inline

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

References Array4D_cmplx< T >::SubArray4D(), Array4D_cmplx< T >::td1d2d3, and Array4D_cmplx< T >::v.

2499  {
2500  valarray<size_t> sz(2), str(2);
2501  str[1] = 1; str[0] = td1d2d3;
2502  sz[1] = td1d2d3; sz[0] = e-b+1;
2503  return CGSlice_iter<T>(v,gslice(b*td1d2d3,sz,str));
2504 }
valarray< T > * v
Definition: lib-array.h:2294
size_t td1d2d3
Definition: lib-array.h:2298
Here is the call graph for this function:

◆ Dd1()

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

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

References Array4D_cmplx< T >::dim().

2789  {
2790  for(long i(0); i< 2*dim()-4; ++i) {
2791  (*v)[i] -= (*v)[i+4];
2792  }
2793  for(long i(2*dim()-5); i>-1; --i) {
2794  (*v)[i+2] = (*v)[i];
2795  }
2796  return *this;
2797 }
size_t dim() const
Definition: lib-array.h:2307
Here is the call graph for this function:

◆ Dd2()

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

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

References Array4D_cmplx< T >::dim(), and Array4D_cmplx< T >::td1.

2800  {
2801  long twotd1 = 2*td1;
2802  for(long i(0); i< 2*dim()-twotd1; ++i) {
2803  (*v)[i] -= (*v)[i+twotd1];
2804  }
2805  for(long i(2*dim()-twotd1-1); i>-1; --i) {
2806  (*v)[i+td1] = (*v)[i];
2807  }
2808  return *this;
2809 }
size_t dim() const
Definition: lib-array.h:2307
Here is the call graph for this function:

◆ Dd3()

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

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

References Array4D_cmplx< T >::dim(), and Array4D_cmplx< T >::td1d2.

2812  {
2813  long twotd1d2 = 2*td1d2;
2814  for(long i(0); i< 2*dim()-twotd1d2; ++i) {
2815  (*v)[i] -= (*v)[i+twotd1d2];
2816  }
2817  for(long i(2*dim()-twotd1d2-1); i>-1; --i) {
2818  (*v)[i+td1d2] = (*v)[i];
2819  }
2820  return *this;
2821 }
size_t dim() const
Definition: lib-array.h:2307
size_t td1d2
Definition: lib-array.h:2297
Here is the call graph for this function:

◆ Dd4()

template<class T >
Array4D_cmplx< T > & Array4D_cmplx< T >::Dd4 ( )

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

References Array4D_cmplx< T >::dim(), and Array4D_cmplx< T >::td1d2d3.

2824  {
2825  long twotd1d2d3 = 2*td1d2d3;
2826  for(long i(0); i< long(2*dim())-twotd1d2d3; ++i) {
2827  (*v)[i] -= (*v)[i+twotd1d2d3];
2828  }
2829  for(long i(2*dim()-twotd1d2d3-1); i>-1; --i) {
2830  (*v)[i+td1d2d3] = (*v)[i];
2831  }
2832  return *this;
2833 }
size_t dim() const
Definition: lib-array.h:2307
size_t td1d2d3
Definition: lib-array.h:2298
Here is the call graph for this function:

◆ dim()

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

◆ dim1()

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

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

References Array4D< T >::d1.

Referenced by Array4D_cmplx< T >::Array4D_cmplx().

2308 {return d1;}
Here is the caller graph for this function:

◆ dim2()

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

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

References Array4D< T >::d2.

Referenced by Array4D_cmplx< T >::Array4D_cmplx().

2309 {return d2;}
Here is the caller graph for this function:

◆ dim3()

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

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

References Array4D< T >::d3.

Referenced by Array4D_cmplx< T >::Array4D_cmplx().

2310 {return d3;}
Here is the caller graph for this function:

◆ dim4()

template<class T >
size_t Array4D_cmplx< T >::dim4 ( ) const
inline

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

References Array4D< T >::d4.

Referenced by Array4D_cmplx< T >::Array4D_cmplx().

2311 {return d4;}
Here is the caller graph for this function:

◆ Filterd1()

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

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

References Array4D_cmplx< T >::d2, Array4D_cmplx< T >::d3, Array4D_cmplx< T >::d4, and Array4D_cmplx< T >::td1.

2837  {
2838  for (size_t j(0); j < d2*d3*d4; ++j ){
2839  for (size_t i(j*td1); i< j*td1+2*N; ++i ){
2840  (*v)[i] = 0.0;
2841  }
2842  }
2843  return *this;
2844 }

◆ imag() [1/2]

template<class T >
T & Array4D_cmplx< T >::imag ( size_t  i,
size_t  j,
size_t  k,
size_t  l 
)
inline

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

References Array4D_cmplx< T >::td1, Array4D_cmplx< T >::td1d2, Array4D_cmplx< T >::td1d2d3, and Array4D_cmplx< T >::v.

Referenced by Array4D_cmplx< T >::multid1(), Array4D_cmplx< T >::multid2(), Array4D_cmplx< T >::multid3(), and Array4D_cmplx< T >::multid4().

2430  {
2431  return (*v)[2*i+1+j*td1+k*td1d2+l*td1d2d3];
2432 }
valarray< T > * v
Definition: lib-array.h:2294
size_t td1d2
Definition: lib-array.h:2297
size_t td1d2d3
Definition: lib-array.h:2298
Here is the caller graph for this function:

◆ imag() [2/2]

template<class T >
T Array4D_cmplx< T >::imag ( size_t  i,
size_t  j,
size_t  k,
size_t  l 
) const
inline

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

References Array4D_cmplx< T >::td1, Array4D_cmplx< T >::td1d2, Array4D_cmplx< T >::td1d2d3, and Array4D_cmplx< T >::v.

2434  {
2435  return (*v)[2*i+1+j*td1+k*td1d2+l*td1d2d3];
2436 }
valarray< T > * v
Definition: lib-array.h:2294
size_t td1d2
Definition: lib-array.h:2297
size_t td1d2d3
Definition: lib-array.h:2298

◆ multid1() [1/2]

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

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

References Array4D_cmplx< T >::d1, Array4D_cmplx< T >::dim(), and Array4D_cmplx< T >::td1.

2659  {
2660  for (size_t j(0); j< 2*dim(); j+= td1 ){
2661  for (size_t i(0); i< d1; ++i ){
2662  (*v)[2*i+j] *= vmulti[i];
2663  (*v)[2*i+1+j] *= vmulti[i];
2664  }
2665  }
2666  return *this;
2667 }
size_t dim() const
Definition: lib-array.h:2307
Here is the call graph for this function:

◆ multid1() [2/2]

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

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

References Array4D_cmplx< T >::d1, Array4D_cmplx< T >::dim(), Array4D_cmplx< T >::imag(), Array4D_cmplx< T >::td1, and Array4D_cmplx< T >::v.

2669  {
2670  for (size_t j(0); j< 2*dim(); j+=td1 ){
2671  for (size_t i(0); i< d1; ++i ){
2672  T vi((*v)[2*i+j]*vmulti[i].imag());
2673  (*v)[2*i+j] *= vmulti[i].real(); // v[i] = Aa
2674  (*v)[2*i+j] -= (*v)[2*i+1+j] * vmulti[i].imag(); // v[i] = Aa - Bb
2675  (*v)[2*i+1+j] *= vmulti[i].real(); // v[i+1] = Ba
2676  (*v)[2*i+1+j] += vi; // v[i+1] = Ba + Ab
2677  }
2678  }
2679  return *this;
2680 }
size_t dim() const
Definition: lib-array.h:2307
valarray< T > * v
Definition: lib-array.h:2294
T & imag(size_t i, size_t j, size_t k, size_t l)
Definition: lib-array.h:2430
Here is the call graph for this function:

◆ multid2() [1/2]

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

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

References Array4D_cmplx< T >::d2, Array4D_cmplx< T >::dim(), and Array4D_cmplx< T >::td1.

2683  {
2684  for (size_t k(0); k< 2*dim(); k+=td1*d2 ) {
2685  for (size_t j(0); j< d2; ++j ) {
2686  for (size_t i(j*td1); i< (j+1)*td1; ++i ){
2687  (*v)[i+k] *= vmulti[j];
2688  }
2689  }
2690  }
2691  return *this;
2692 }
size_t dim() const
Definition: lib-array.h:2307
Here is the call graph for this function:

◆ multid2() [2/2]

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

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

References Array4D_cmplx< T >::d2, Array4D_cmplx< T >::dim(), Array4D_cmplx< T >::imag(), Array4D_cmplx< T >::td1, and Array4D_cmplx< T >::v.

2694  {
2695  for (size_t k(0); k< 2*dim(); k+=td1*d2 ) {
2696  for (size_t j(0); j< d2; ++j ) {
2697  for (size_t i(j*td1); i< (j+1)*td1; i+=2 ){
2698  T vi((*v)[i+k]* vmulti[j].imag());
2699  (*v)[i+k] *= vmulti[j].real(); // v[i] = Aa
2700  (*v)[i+k] -= (*v)[i+k+1] * vmulti[j].imag(); // v[i] = Aa - Bb
2701  (*v)[i+k+1] *= vmulti[j].real(); // v[i+1] = Ba
2702  (*v)[i+k+1] += vi; // v[i+1] = Ba + Ab
2703  }
2704  }
2705  }
2706  return *this;
2707 }
size_t dim() const
Definition: lib-array.h:2307
valarray< T > * v
Definition: lib-array.h:2294
T & imag(size_t i, size_t j, size_t k, size_t l)
Definition: lib-array.h:2430
Here is the call graph for this function:

◆ multid2d3d4() [1/2]

template<class T >
Array4D_cmplx< T > & Array4D_cmplx< T >::multid2d3d4 ( const Array3D< T > &  vd2d3d4)

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

References Array3D< T >::array(), Array4D_cmplx< T >::d2, Array4D_cmplx< T >::d3, Array4D_cmplx< T >::d4, and Array4D_cmplx< T >::td1.

2761  {
2762  for (size_t j(0); j < d2*d3*d4; ++j ){
2763  for (size_t i(j*td1); i< (j+1)*td1; ++i ){
2764  (*v)[i] *= vd2d3d4.array()[j];
2765  }
2766  }
2767  return *this;
2768 }
valarray< T > & array() const
Definition: lib-array.h:1056
Here is the call graph for this function:

◆ multid2d3d4() [2/2]

template<class T >
Array4D_cmplx< T > & Array4D_cmplx< T >::multid2d3d4 ( const Array3D_cmplx< T > &  vd2d3d4)

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

References Array3D_cmplx< T >::array(), Array4D_cmplx< T >::d2, Array4D_cmplx< T >::d3, Array4D_cmplx< T >::d4, Array4D_cmplx< T >::td1, and Array4D_cmplx< T >::v.

2772  {
2773  for (size_t j(0); j < d2*d3*d4; ++j ){
2774  for (size_t i(j*td1); i< (j+1)*td1; i+=2 ){
2775  T vi((*v)[i]*vd2d3d4.array()[2*j+1]);
2776  (*v)[i] *= vd2d3d4.array()[2*j]; // v[i] = Aa
2777  (*v)[i] -= (*v)[i+1]*vd2d3d4.array()[2*j+1]; // v[i] = Aa - Bb
2778  (*v)[i+1] *= vd2d3d4.array()[2*j]; // v[i+1] = Ba
2779  (*v)[i+1] += vi; // v[i+1] = Ba + Ab
2780  }
2781  }
2782  return *this;
2783 }
valarray< T > * v
Definition: lib-array.h:2294
valarray< T > & array() const
Definition: lib-array.h:1400
Here is the call graph for this function:

◆ multid3() [1/2]

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

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

References Array4D_cmplx< T >::d2, Array4D_cmplx< T >::d3, Array4D_cmplx< T >::dim(), and Array4D_cmplx< T >::td1.

2710  {
2711  for (size_t l(0); l< 2*dim(); l+=td1*d2*d3) {
2712  for (size_t k(0); k< d3; ++k) {
2713  for (size_t i(k*td1*d2); i< (k+1)*td1*d2; ++i ){
2714  (*v)[i+l] *= vmulti[k];
2715  }
2716  }
2717  }
2718  return *this;
2719 }
size_t dim() const
Definition: lib-array.h:2307
Here is the call graph for this function:

◆ multid3() [2/2]

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

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

References Array4D_cmplx< T >::d2, Array4D_cmplx< T >::d3, Array4D_cmplx< T >::dim(), Array4D_cmplx< T >::imag(), Array4D_cmplx< T >::td1, and Array4D_cmplx< T >::v.

2721  {
2722  for (size_t l(0); l< 2*dim(); l+=td1*d2*d3) {
2723  for (size_t k(0); k< d3; ++k) {
2724  for (size_t i(k*td1*d2); i< (k+1)*td1*d2; i+=2 ){
2725  T vi((*v)[i+l]* vmulti[k].imag());
2726  (*v)[i+l] *= vmulti[k].real(); // v[i] = Aa
2727  (*v)[i+l] -= (*v)[i+l+1] * vmulti[k].imag(); // v[i] = Aa - Bb
2728  (*v)[i+l+1] *= vmulti[k].real(); // v[i+1] = Ba
2729  (*v)[i+l+1] += vi; // v[i+1] = Ba + Ab
2730  }
2731  }
2732  }
2733  return *this;
2734 }
size_t dim() const
Definition: lib-array.h:2307
valarray< T > * v
Definition: lib-array.h:2294
T & imag(size_t i, size_t j, size_t k, size_t l)
Definition: lib-array.h:2430
Here is the call graph for this function:

◆ multid4() [1/2]

template<class T >
Array4D_cmplx< T > & Array4D_cmplx< T >::multid4 ( const valarray< T > &  vmulti)

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

References Array4D_cmplx< T >::d2, Array4D_cmplx< T >::d3, Array4D_cmplx< T >::d4, and Array4D_cmplx< T >::td1.

2737  {
2738  for (size_t k(0); k< d4; ++k) {
2739  for (size_t i(k*td1*d2*d3); i< (k+1)*td1*d2*d3; ++i ){
2740  (*v)[i] *= vmulti[k];
2741  }
2742  }
2743  return *this;
2744 }

◆ multid4() [2/2]

template<class T >
Array4D_cmplx< T > & Array4D_cmplx< T >::multid4 ( const valarray< complex< T > > &  vmulti)

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

References Array4D_cmplx< T >::d2, Array4D_cmplx< T >::d3, Array4D_cmplx< T >::d4, Array4D_cmplx< T >::imag(), Array4D_cmplx< T >::td1, and Array4D_cmplx< T >::v.

2746  {
2747  for (size_t k(0); k< d4; ++k) {
2748  for (size_t i(k*td1*d2*d3); i< (k+1)*td1*d2*d3; i+=2 ){
2749  T vi((*v)[i]* vmulti[k].imag());
2750  (*v)[i] *= vmulti[k].real(); // v[i] = Aa
2751  (*v)[i] -= (*v)[i+1] * vmulti[k].imag(); // v[i] = Aa - Bb
2752  (*v)[i+1] *= vmulti[k].real(); // v[i+1] = Ba
2753  (*v)[i+1] += vi; // v[i+1] = Ba + Ab
2754  }
2755  }
2756  return *this;
2757 }
valarray< T > * v
Definition: lib-array.h:2294
T & imag(size_t i, size_t j, size_t k, size_t l)
Definition: lib-array.h:2430
Here is the call graph for this function:

◆ operator*=() [1/4]

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

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

2562  {
2563  (*v) *=d;
2564  return *this;
2565 }

◆ operator*=() [2/4]

template<class T >
Array4D_cmplx< T > & Array4D_cmplx< T >::operator*= ( const complex< T > &  c)

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

References Array4D_cmplx< T >::d2, Array4D_cmplx< T >::d3, Array4D_cmplx< T >::d4, Array4D_cmplx< T >::real(), Array4D_cmplx< T >::td1, and Array4D_cmplx< T >::v.

2567  {
2568  for (size_t i(0); i< td1*d2*d3*d4; i+=2) { // suppose v[i]+iv[i+1]=A+iB, c=a+ib
2569  T vi((*v)[i]*c.imag());
2570  (*v)[i] *= c.real(); // v[i] = Aa
2571  (*v)[i] -= (*v)[i+1]*c.imag(); // v[i] = Aa - Bb
2572  (*v)[i+1] *= c.real(); // v[i+1] = Ba
2573  (*v)[i+1] += vi; // v[i+1] = Ba + Ab
2574  }
2575  return *this;
2576 }
valarray< T > * v
Definition: lib-array.h:2294
Here is the call graph for this function:

◆ operator*=() [3/4]

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

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

References Array4D< T >::array(), Array4D_cmplx< T >::d1, Array4D_cmplx< T >::d2, Array4D_cmplx< T >::d3, and Array4D_cmplx< T >::d4.

2578  {
2579  for (size_t i(0); i< d1*d2*d3*d4; ++i) {
2580  (*v)[2*i] *= vmulti.array()[i];
2581  (*v)[2*i+1] *= vmulti.array()[i];
2582  }
2583  return *this;
2584 }
valarray< T > & array() const
Definition: lib-array.h:1902
Here is the call graph for this function:

◆ operator*=() [4/4]

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

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

References Array4D_cmplx< T >::array(), Array4D_cmplx< T >::d2, Array4D_cmplx< T >::d3, Array4D_cmplx< T >::d4, Array4D_cmplx< T >::td1, and Array4D_cmplx< T >::v.

2586  {
2587  for (size_t i(0); i< td1*d2*d3*d4; i+=2) { // suppose v[i]+iv[i+1]=A+iB, vmulti[i] + ivmulti[i+1] = a+ib
2588  T vi((*v)[i] * vmulti.array()[i+1]);
2589  (*v)[i] *= vmulti.array()[i]; // v[i] = Aa
2590  (*v)[i] -= (*v)[i+1]*vmulti.array()[i+1]; // v[i] = Aa - Bb
2591  (*v)[i+1] *= vmulti.array()[i]; // v[i+1] = Ba
2592  (*v)[i+1] += vi; // v[i+1] = Ba + Ab
2593  }
2594  return *this;
2595 }
valarray< T > * v
Definition: lib-array.h:2294
valarray< T > & array() const
Definition: lib-array.h:2312
Here is the call graph for this function:

◆ operator+=() [1/4]

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

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

References Array4D_cmplx< T >::d2, Array4D_cmplx< T >::d3, Array4D_cmplx< T >::d4, and Array4D_cmplx< T >::td1.

2599  {
2600  for (size_t i(0); i< td1*d2*d3*d4; i+=2) {
2601  (*v)[i] +=d;
2602  }
2603  return *this;
2604 }

◆ operator+=() [2/4]

template<class T >
Array4D_cmplx< T > & Array4D_cmplx< T >::operator+= ( const complex< T > &  c)

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

References Array4D_cmplx< T >::d2, Array4D_cmplx< T >::d3, Array4D_cmplx< T >::d4, Array4D_cmplx< T >::real(), and Array4D_cmplx< T >::td1.

2606  {
2607  for (size_t i(0); i< td1*d2*d3*d4; i+=2) {
2608  (*v)[i] +=c.real();
2609  (*v)[i+1] +=c.imag();
2610  }
2611  return *this;
2612 }
Here is the call graph for this function:

◆ operator+=() [3/4]

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

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

References Array4D< T >::array(), Array4D_cmplx< T >::d1, Array4D_cmplx< T >::d2, Array4D_cmplx< T >::d3, and Array4D_cmplx< T >::d4.

2614  {
2615  for (size_t i(0); i< d1*d2*d3*d4; ++i) {
2616  (*v)[2*i] += vadd.array()[i];
2617  }
2618  return *this;
2619 }
valarray< T > & array() const
Definition: lib-array.h:1902
Here is the call graph for this function:

◆ operator+=() [4/4]

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

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

References Array4D_cmplx< T >::array().

2621  {
2622  (*v) += vadd.array();
2623  return *this;
2624 }
valarray< T > & array() const
Definition: lib-array.h:2312
Here is the call graph for this function:

◆ operator-=() [1/4]

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

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

References Array4D_cmplx< T >::d2, Array4D_cmplx< T >::d3, Array4D_cmplx< T >::d4, and Array4D_cmplx< T >::td1.

2628  {
2629  for (size_t i(0); i< td1*d2*d3*d4; i+=2) {
2630  (*v)[i] -=d;
2631  }
2632  return *this;
2633 }

◆ operator-=() [2/4]

template<class T >
Array4D_cmplx< T > & Array4D_cmplx< T >::operator-= ( const complex< T > &  c)

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

References Array4D_cmplx< T >::d2, Array4D_cmplx< T >::d3, Array4D_cmplx< T >::d4, Array4D_cmplx< T >::real(), and Array4D_cmplx< T >::td1.

2635  {
2636  for (size_t i(0); i< td1*d2*d3*d4; i+=2) {
2637  (*v)[i] -=c.real();
2638  (*v)[i+1] -=c.imag();
2639  }
2640  return *this;
2641 }
Here is the call graph for this function:

◆ operator-=() [3/4]

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

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

References Array4D< T >::array(), Array4D_cmplx< T >::d1, Array4D_cmplx< T >::d2, Array4D_cmplx< T >::d3, and Array4D_cmplx< T >::d4.

2643  {
2644  for (size_t i(0); i< d1*d2*d3*d4; ++i) {
2645  (*v)[2*i] -= vmin.array()[i];
2646  }
2647  return *this;
2648 }
valarray< T > & array() const
Definition: lib-array.h:1902
Here is the call graph for this function:

◆ operator-=() [4/4]

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

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

References Array4D_cmplx< T >::array().

2650  {
2651  (*v) -= vmin.array();
2652  return *this;
2653 }
valarray< T > & array() const
Definition: lib-array.h:2312
Here is the call graph for this function:

◆ operator=() [1/4]

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

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

References Array4D_cmplx< T >::d2, Array4D_cmplx< T >::d3, Array4D_cmplx< T >::d4, and Array4D_cmplx< T >::td1.

2532  {
2533  for (size_t i(0); i< td1*d2*d3*d4; i+=2) {
2534  (*v)[i] = d;
2535  (*v)[i+1] = 0.0;
2536  }
2537  return *this;
2538 }

◆ operator=() [2/4]

template<class T >
Array4D_cmplx< T > & Array4D_cmplx< T >::operator= ( const complex< T > &  c)

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

References Array4D_cmplx< T >::d2, Array4D_cmplx< T >::d3, Array4D_cmplx< T >::d4, Array4D_cmplx< T >::real(), and Array4D_cmplx< T >::td1.

2539  {
2540  for (size_t i(0); i< td1*d2*d3*d4; i+=2) {
2541  (*v)[i] =c.real();
2542  (*v)[i+1] =c.imag();
2543  }
2544  return *this;
2545 }
Here is the call graph for this function:

◆ operator=() [3/4]

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

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

References Array4D< T >::array(), Array4D_cmplx< T >::d1, Array4D_cmplx< T >::d2, Array4D_cmplx< T >::d3, and Array4D_cmplx< T >::d4.

2546  {
2547  for (size_t i(0); i< d1*d2*d3*d4; ++i) {
2548  (*v)[2*i] = other.array()[i];
2549  (*v)[2*i+1] = 0.0;
2550  }
2551  return *this;
2552 }
valarray< T > & array() const
Definition: lib-array.h:1902
Here is the call graph for this function:

◆ operator=() [4/4]

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

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

References Array4D_cmplx< T >::array().

2553  {
2554  if (this != &other) { //self-assignment
2555  (*v) = other.array();
2556  }
2557  return *this;
2558 }
valarray< T > & array() const
Definition: lib-array.h:2312
Here is the call graph for this function:

◆ operator[]() [1/2]

template<class T >
T & Array4D_cmplx< T >::operator[] ( size_t  i)
inline

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

References Array4D_cmplx< T >::v.

2414  {
2415  return (*v)[i];
2416 }
valarray< T > * v
Definition: lib-array.h:2294

◆ operator[]() [2/2]

template<class T >
T Array4D_cmplx< T >::operator[] ( size_t  i) const
inline

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

References Array4D_cmplx< T >::v.

2418  {
2419  return (*v)[i];
2420 }
valarray< T > * v
Definition: lib-array.h:2294

◆ real() [1/2]

template<class T >
T & Array4D_cmplx< T >::real ( size_t  i,
size_t  j,
size_t  k,
size_t  l 
)
inline

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

References Array4D_cmplx< T >::td1, Array4D_cmplx< T >::td1d2, Array4D_cmplx< T >::td1d2d3, and Array4D_cmplx< T >::v.

Referenced by Array4D_cmplx< T >::operator*=(), Array4D_cmplx< T >::operator+=(), Array4D_cmplx< T >::operator-=(), and Array4D_cmplx< T >::operator=().

2422  {
2423  return (*v)[2*i+j*td1+k*td1d2+l*td1d2d3];
2424 }
valarray< T > * v
Definition: lib-array.h:2294
size_t td1d2
Definition: lib-array.h:2297
size_t td1d2d3
Definition: lib-array.h:2298
Here is the caller graph for this function:

◆ real() [2/2]

template<class T >
T Array4D_cmplx< T >::real ( size_t  i,
size_t  j,
size_t  k,
size_t  l 
) const
inline

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

References Array4D_cmplx< T >::td1, Array4D_cmplx< T >::td1d2, Array4D_cmplx< T >::td1d2d3, and Array4D_cmplx< T >::v.

2426  {
2427  return (*v)[2*i+j*td1+k*td1d2+l*td1d2d3];
2428 }
valarray< T > * v
Definition: lib-array.h:2294
size_t td1d2
Definition: lib-array.h:2297
size_t td1d2d3
Definition: lib-array.h:2298

◆ SubArray4D() [1/2]

template<class T >
GSlice_iter< T > Array4D_cmplx< T >::SubArray4D ( size_t  st,
size_t  nx,
size_t  ny,
size_t  nz,
size_t  nw 
)
inline

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

References Array4D_cmplx< T >::td1, Array4D_cmplx< T >::td1d2, Array4D_cmplx< T >::td1d2d3, and Array4D_cmplx< T >::v.

Referenced by Array4D_cmplx< T >::d4c().

2511  {
2512  valarray<size_t> sz(4), str(4);
2513  str[3] = 1; str[2] = td1; str[1] = td1d2; str[0] = td1d2d3;
2514  sz[3] = 2*nx; sz[2] = ny; sz[1] = nz; sz[0] = nw;
2515  return GSlice_iter<T>(v,gslice(2*st,sz,str));
2516 }
valarray< T > * v
Definition: lib-array.h:2294
size_t td1d2
Definition: lib-array.h:2297
size_t td1d2d3
Definition: lib-array.h:2298
Here is the caller graph for this function:

◆ SubArray4D() [2/2]

template<class T >
CGSlice_iter< T > Array4D_cmplx< T >::SubArray4D ( size_t  st,
size_t  nx,
size_t  ny,
size_t  nz,
size_t  nw 
) const
inline

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

References Array4D_cmplx< T >::td1, Array4D_cmplx< T >::td1d2, Array4D_cmplx< T >::td1d2d3, and Array4D_cmplx< T >::v.

2521  {
2522  valarray<size_t> sz(4), str(4);
2523  str[3] = 1; str[2] = td1; str[1] = td1d2; str[0] = td1d2d3;
2524  sz[3] = 2*nx; sz[2] = ny; sz[1] = nz; sz[0] = nw;
2525  return CGSlice_iter<T>(v,gslice(2*st,sz,str));
2526 }
valarray< T > * v
Definition: lib-array.h:2294
size_t td1d2
Definition: lib-array.h:2297
size_t td1d2d3
Definition: lib-array.h:2298

Field Documentation

◆ d1

◆ d2

◆ d3

◆ d4

◆ td1

◆ td1d2

◆ td1d2d3

◆ v


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