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

#include <lib-array.h>

Public Member Functions

 Array2D (size_t x, size_t y)
 
 Array2D (const Array2D &other)
 
 ~Array2D ()
 
size_t dim () const
 
size_t dim1 () const
 
size_t dim2 () const
 
valarray< T > & array () const
 
T & operator() (size_t i, size_t j)
 
operator() (size_t i, size_t j) const
 
T & operator() (size_t i)
 
operator() (size_t i) const
 
vector< T > d2c (size_t j)
 
GSlice_iter< T > d1c (size_t b, size_t e)
 
GSlice_iter< T > d2c (size_t b, size_t e)
 
GSlice_iter< T > SubArray2D (size_t st, size_t nx, size_t ny)
 
CGSlice_iter< T > d2c (size_t b, size_t e) const
 
CGSlice_iter< T > d1c (size_t b, size_t e) const
 
CGSlice_iter< T > SubArray2D (size_t st, size_t nx, size_t ny) const
 
Array2Doperator= (const T &d)
 
Array2Doperator= (const Array2D &other)
 
Array2Doperator*= (const T &d)
 
Array2Doperator*= (const Array2D &vmulti)
 
Array2Doperator+= (const T &d)
 
Array2Doperator+= (const Array2D &vadd)
 
Array2Doperator-= (const T &d)
 
Array2Doperator-= (const Array2D &vmin)
 
Array2Dmultid1 (const valarray< T > &vmulti)
 
Array2Dmultid2 (const valarray< T > &vmulti)
 
Array2DDd1 ()
 
Array2DDd2 ()
 
Array2DFilterd1 (size_t N)
 

Private Attributes

valarray< T > * v
 
size_t d1
 
size_t d2
 

Detailed Description

template<class T>
class Array2D< T >

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

Constructor & Destructor Documentation

◆ Array2D() [1/2]

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

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

337  : d1(x), d2(y) {
338  v = new valarray<T>(d1*d2);
339 }
size_t d2
Definition: lib-array.h:279
size_t d1
Definition: lib-array.h:279
valarray< T > * v
Definition: lib-array.h:278

◆ Array2D() [2/2]

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

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

341  {
342  d1 = other.dim1();
343  d2 = other.dim2();
344  v = new valarray<T>(d1*d2);
345  (*v) = other.array();
346 }
size_t d2
Definition: lib-array.h:279
size_t dim1() const
Definition: lib-array.h:289
size_t dim2() const
Definition: lib-array.h:290
size_t d1
Definition: lib-array.h:279
valarray< T > & array() const
Definition: lib-array.h:291
valarray< T > * v
Definition: lib-array.h:278

◆ ~Array2D()

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

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

348  {
349  delete v;
350 }
valarray< T > * v
Definition: lib-array.h:278

Member Function Documentation

◆ array()

◆ d1c() [1/2]

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

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

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

384  {
385  valarray<size_t> sz(2), str(2);
386  str[1] = d1; str[0] = 1;
387  sz[1] = d2; sz[0] = e-b+1;
388  return GSlice_iter<T>(v,gslice(b,sz,str));
389 }
size_t d2
Definition: lib-array.h:279
size_t d1
Definition: lib-array.h:279
valarray< T > * v
Definition: lib-array.h:278
Here is the caller graph for this function:

◆ d1c() [2/2]

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

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

392  {
393  valarray<size_t> sz(2), str(2);
394  str[1] = d1; str[0] = 1;
395  sz[1] = d2; sz[0] = e-b+1;
396  return CGSlice_iter<T>(v,gslice(b,sz,str));
397 }
size_t d2
Definition: lib-array.h:279
size_t d1
Definition: lib-array.h:279
valarray< T > * v
Definition: lib-array.h:278

◆ d2c() [1/3]

template<class T >
vector< T > Array2D< T >::d2c ( size_t  j)

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

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

372  {
373  vector<T> d1vec(d1);
374  for (size_t i(0); i < d1; ++i ){
375  d1vec[i] = (*v)[i+j*d1];
376  }
377  return d1vec;
378 }
size_t d1
Definition: lib-array.h:279
Here is the caller graph for this function:

◆ d2c() [2/3]

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

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

400  {
401  valarray<size_t> sz(1), str(1); // sz --> size, str --> stride
402  str[0] = 1; sz[0] = (e-b+1)*d1;
403  return GSlice_iter<T>(v,gslice(b*d1,sz,str));
404 }
size_t d1
Definition: lib-array.h:279
valarray< T > * v
Definition: lib-array.h:278

◆ d2c() [3/3]

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

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

407  {
408  valarray<size_t> sz(1), str(1); // sz --> size, str --> stride
409  str[0] = 1; sz[0] = (e-b+1)*d1;
410  return CGSlice_iter<T>(v,gslice(b*d1,sz,str));
411 }
size_t d1
Definition: lib-array.h:279
valarray< T > * v
Definition: lib-array.h:278

◆ Dd1()

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

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

Referenced by Array2D_cmplx< T >::array(), and SHarmonic1D::Dp().

507  {
508  for(long i(0); i< long(d1*d2)-2; ++i) {
509  (*v)[i] -= (*v)[i+2];
510  }
511  for(long i(d1*d2-3); i>-1; --i) {
512  (*v)[i+1] = (*v)[i];
513  }
514 
515 
516  // Array2D<T> temp(*this);
517 
518  // for (long i2(0); i2<long(d2);++i2){
519 
520 
521  // /// Second Order
522  // temp(0,i2) = 2.0*((*this)(0,i2)-(*this)(1,i2));
523 
524 
525 
526  // // temp(i1,1) = 1.0/12.0*((*this)(i1,4)-6.0*(*this)(i1,3)+18.0*(*this)(i1,2)-10.0*(*this)(i1,1)-3.0*(*this)(i1,0));
527 
528  // for (long i1(1); i1<long(d1)-1;++i1){
529  // // temp(i1,i2) = 1.0/12.0*(-(*this)(i1,i2+2)+8.0*(*this)(i1,i2+1)-8.0*(*this)(i1,i2-1)+(*this)(i1,i2-2));
530 
531  // /// Second Order
532  // temp(i1,i2) = (*this)(i1-1,i2) - (*this)(i1+1,i2);
533  // }
534 
535 
536 
537 
538  // // temp(i1,long(d2)-2) = 1.0/12.0*(3.0*(*this)(i1,long(d2)-1)+10.0*(*this)(i1,long(d2)-2)-18.0*(*this)(i1,long(d2)-3)+6.0*(*this)(i1,long(d2)-4)-(*this)(i1,long(d2)-5));
539  // // temp(i1,long(d2)-1) = (*this)(i1,long(d2)-1)-(*this)(i1,long(d2)-2);
540 
541  // /// Second Order
542  // temp(long(d1)-1,i2) = 2.0*((*this)(long(d1)-2,i2)-(*this)(long(d1)-1,i2));
543  // }
544 
545  // *this = temp;
546  return *this;
547 
548 }
size_t d2
Definition: lib-array.h:279
size_t d1
Definition: lib-array.h:279
Here is the caller graph for this function:

◆ Dd2()

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

Has boundary errors unless boundary cells increased for each RK level

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

Referenced by Array2D_cmplx< T >::array(), SHarmonic1D::Dx(), and SHarmonic2D::Dx().

556  {
557  // Array2D<T> temp(*this);
558 
559  // for (long i1(0); i1<long(d1);++i1){
560  // /// Second Order
561  // temp(i1,0) = 2.0*((*this)(i1,0)-(*this)(i1,1));
562  // // std::cout << "this(" << i1 << ")" << (*this)(i1,0) << "\n";
563  // // std::cout << "temp(" << i1 << ")" << temp(i1,0) << "\n";
564 
565  // // temp(i1,1) = 1.0/12.0*((*this)(i1,4)-6.0*(*this)(i1,3)+18.0*(*this)(i1,2)-10.0*(*this)(i1,1)-3.0*(*this)(i1,0));
566  // for (long i2(1); i2<long(d2)-1;++i2){
567  // // temp(i1,i2) = 1.0/12.0*(-(*this)(i1,i2+2)+8.0*(*this)(i1,i2+1)-8.0*(*this)(i1,i2-1)+(*this)(i1,i2-2));
568  // /// Second Order
569  // temp(i1,i2) = (*this)(i1,i2-1) - (*this)(i1,i2+1);
570  // // std::cout << "this(" << i1 << "," << i2 << ")" << (*this)(i1,i2) << "\n";
571  // }
572  // // temp(i1,long(d2)-2) = 1.0/12.0*(3.0*(*this)(i1,long(d2)-1)+10.0*(*this)(i1,long(d2)-2)-18.0*(*this)(i1,long(d2)-3)+6.0*(*this)(i1,long(d2)-4)-(*this)(i1,long(d2)-5));
573  // // temp(i1,long(d2)-1) = (*this)(i1,long(d2)-1)-(*this)(i1,long(d2)-2);
574  // /// Second Order
575  // temp(i1,long(d2)-1) = 2.0*((*this)(i1,long(d2)-2)-(*this)(i1,long(d2)-1));
576  // // std::cout << "this(" << i1 << "," << long(d2)-1 << ")" << (*this)(i1,long(d2)-1) << "\n";
577  // }
578 
579  // *this = temp;
580  // return *this;
581 
582 
585  // std::cout << "\n d1*d2-twod1 = " << long(d1*d2)-2*d1 << "\n";
586 
587  long twod1(2*d1);
588  for(long i(0); i< long(d1*d2)-twod1; ++i) {
589  // std::cout << "v[" << i << "] = " << (*v)[i]
590  // << ", v[" << i+twod1 << "] = " << (*v)[i+twod1] << "\n";
591 
592  (*v)[i] -= (*v)[i+twod1];
593  }
594 
595  for(long i(d1*d2-twod1-1); i>-1; --i) {
596  (*v)[i+d1] = (*v)[i];
597  }
598  return *this;
600 }
size_t d2
Definition: lib-array.h:279
size_t d1
Definition: lib-array.h:279
Here is the caller graph for this function:

◆ dim()

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

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

288 {return d1*d2;}
size_t d2
Definition: lib-array.h:279
size_t d1
Definition: lib-array.h:279

◆ dim1()

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

◆ dim2()

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

◆ Filterd1()

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

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

Referenced by Array2D_cmplx< T >::array(), SHarmonic1D::Filterp(), and SHarmonic2D::Filterp().

604  {
605  for (size_t j(0); j < d2; ++j ){
606  for (size_t i(j*d1); i< j*d1+N; ++i ){
607  (*v)[i] = 0.0;
608  }
609  }
610  return *this;
611 }
size_t d2
Definition: lib-array.h:279
size_t d1
Definition: lib-array.h:279
Here is the caller graph for this function:

◆ multid1()

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

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

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

480  {
481  for (size_t j(0); j< d1*d2; j+=d1 ){
482  for (size_t i(0); i< d1; ++i ){
483  (*v)[i+j] *= vmulti[i];
484  }
485  }
486  return *this;
487 }
size_t d2
Definition: lib-array.h:279
size_t d1
Definition: lib-array.h:279
Here is the caller graph for this function:

◆ multid2()

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

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

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

490  {
491  for (size_t j(0); j< d2; ++j ){
492  for (size_t i(j*d1); i< (j+1)*d1; ++i ){
493  (*v)[i] *= vmulti[j];
494  }
495  }
496  return *this;
497 }
size_t d2
Definition: lib-array.h:279
size_t d1
Definition: lib-array.h:279
Here is the caller graph for this function:

◆ operator()() [1/4]

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

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

356  {
357  return (*v)[i+j*d1];
358 }
size_t d1
Definition: lib-array.h:279
valarray< T > * v
Definition: lib-array.h:278

◆ operator()() [2/4]

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

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

360  {
361  return (*v)[i+j*d1];
362 }
size_t d1
Definition: lib-array.h:279
valarray< T > * v
Definition: lib-array.h:278

◆ operator()() [3/4]

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

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

364  {
365  return (*v)[i];
366 }
valarray< T > * v
Definition: lib-array.h:278

◆ operator()() [4/4]

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

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

368  {
369  return (*v)[i];
370 }
valarray< T > * v
Definition: lib-array.h:278

◆ operator*=() [1/2]

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

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

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

447  {
448  (*v) *=d;
449  return *this;
450 }
Here is the caller graph for this function:

◆ operator*=() [2/2]

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

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

451  {
452  (*v) *= vmulti.array();
453  return *this;
454 }
valarray< T > & array() const
Definition: lib-array.h:291

◆ operator+=() [1/2]

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

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

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

457  {
458  (*v) +=d;
459  return *this;
460 }
Here is the caller graph for this function:

◆ operator+=() [2/2]

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

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

461  {
462  (*v) += vadd.array();
463  return *this;
464 }
valarray< T > & array() const
Definition: lib-array.h:291

◆ operator-=() [1/2]

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

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

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

467  {
468  (*v) -=d;
469  return *this;
470 }
Here is the caller graph for this function:

◆ operator-=() [2/2]

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

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

471  {
472  (*v) -= vmin.array();
473  return *this;
474 }
valarray< T > & array() const
Definition: lib-array.h:291

◆ operator=() [1/2]

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

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

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

435  {
436  (*v) = d;
437  return *this;
438 }
Here is the caller graph for this function:

◆ operator=() [2/2]

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

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

439  {
440  if (this != &other) { //self-assignment
441  (*v) = other.array();
442  }
443  return *this;
444 }
valarray< T > & array() const
Definition: lib-array.h:291

◆ SubArray2D() [1/2]

template<class T >
GSlice_iter< T > Array2D< T >::SubArray2D ( size_t  st,
size_t  nx,
size_t  ny 
)
inline

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

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

416  {
417  valarray<size_t> sz(2), str(2);
418  str[1] = 1; str[0] = dim1();
419  sz[1] = nx; sz[0] = ny;
420  return GSlice_iter<T>(v,gslice(st,sz,str));
421 }
size_t dim1() const
Definition: lib-array.h:289
valarray< T > * v
Definition: lib-array.h:278
Here is the caller graph for this function:

◆ SubArray2D() [2/2]

template<class T >
CGSlice_iter< T > Array2D< T >::SubArray2D ( size_t  st,
size_t  nx,
size_t  ny 
) const
inline

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

424  {
425  valarray<size_t> sz(2), str(2);
426  str[1] = 1; str[0] = dim1();
427  sz[1] = nx; sz[0] = ny;
428  return CGSlice_iter<T>(v,gslice(st,sz,str));
429 }
size_t dim1() const
Definition: lib-array.h:289
valarray< T > * v
Definition: lib-array.h:278

Field Documentation

◆ d1

◆ d2

◆ v


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