1 #ifndef QNANO_NEW_TENSOR4_DEFINED_H     2 #define QNANO_NEW_TENSOR4_DEFINED_H    14   std::complex<double> *data;
    16   inline size_t get_index(
size_t i, 
size_t j, 
size_t k, 
size_t l)
const{
    17     return ((i*size[1]+j)*size[2]+k)*size[3]+l;
    21   inline size_t get_totalsize()
const{ 
return size[0]*size[1]*size[2]*size[3];  }
    25   void allocate(){  data=
new std::complex<double>[get_totalsize()];  }
    26   void deallocate(){ 
delete[] data; }
    28   inline size_t get_size(
size_t i)
const{
return size[i];}
    29   void resize(
size_t i, 
size_t j, 
size_t k, 
size_t l){
    30     size[0]=i; size[1]=j; size[2]=k; size[3]=l;
    35     size_t ts=get_totalsize();
    36     for(
size_t i=0; i<ts; i++)data[i]=0.;
    39   const std::complex<double> &operator()(
size_t i, 
size_t j, 
size_t k, 
size_t l)
const{
    40     return data[get_index(i,j,k,l)];
    42   std::complex<double> &operator()(
size_t i, 
size_t j, 
size_t k, 
size_t l){
    43     return data[get_index(i,j,k,l)];
    45   const std::complex<double> &get_check(
int i, 
int j, 
int k, 
int l){
    46     if(i<0 || i>=(
int)size[0] || j<0 || j>=(
int)size[1] || k<0 || k>=(
int)size[2] || l<0 || l>=(
int)size[3]){
    47       std::cerr<<
"Tensor4: out of bounds!"<<std::endl;
    50     return data[get_index(i,j,k,l)];
    55   void copy(
const Tensor4 &other){
    56     resize(other.get_size(0),other.get_size(1),other.get_size(2),other.get_size(3));
    57     for(
size_t i=0; i<get_totalsize(); i++){
    58       data[i]=other.data[i];
    69     size[0]=size[1]=size[2]=size[3]=0;
    72   Tensor4(
size_t i, 
size_t j, 
size_t k, 
size_t l){
    73     size[0]=i; size[1]=j; size[2]=k; size[3]=l;
 Class to store a rank-4 (complex) tensor: 
Definition: Tensor4.h:9