CHROMA
block_subset.h
Go to the documentation of this file.
1 // -*- C++ -*-
2 /*! \file
3  * \brief Key for propagator colorstd::vector sources
4  */
5 
6 #ifndef __FUNC_block_h__
7 #define __FUNC_block_h__
8 
9 #include "chromabase.h"
10 
11 namespace Chroma
12 {
13 
14  //! Function object used for constructing a block set
15  class BlockFunc : public SetFunc
16  {
17  public:
18  BlockFunc(const multi1d<int>& blk ): time_dir(-1){
19  init(blk);
20  }
21  BlockFunc(int dir, const multi1d<int>& blk ): time_dir(dir){
22  init(blk);
23  }
24 
25  int operator() (const multi1d<int>& coordinate) const{
26  int b = 0 ;
27 
28  for(int d(Nd-1); d>-1 ;d--)
29  b = blockNum[d]*b + coordinate[d]/block[d] ;
30 
31  return b ;
32  }
33 
34  int numSubsets() const{
35  return Nblocks ;
36  }
37 
38  private:
39  BlockFunc() {} // hide default constructor
40 
41  void init(const multi1d<int>& blk) {
42  blockNum.resize(Nd) ;
43  block.resize(Nd) ;
44  Nblocks = 1 ;
45  int k(0);
46  for(int d(0); d < Nd; d++){
47  if (d == time_dir)
48  block[d] = Layout::lattSize()[time_dir] ;
49  else{
50  if(k<blk.size()){
51  block[d] = blk[k] ;
52  k++ ;
53  }
54  else
55  block[d] = Layout::lattSize()[d] ;
56  }
57  blockNum[d] = Layout::lattSize()[d] / block[d];
58  Nblocks *= blockNum[d] ;
59  }// d
60 
61  /** DEBUG
62  QDPIO::cout<<"BlockNums: ";
63  for(int d(0); d < Nd; d++){
64  QDPIO::cout<<blockNum[d]<<" ";
65  }
66  QDPIO::cout<<std::endl;
67 
68  QDPIO::cout<<"BlockSize: ";
69  for(int d(0); d < Nd; d++){
70  QDPIO::cout<<block[d]<<" ";
71  }
72  QDPIO::cout<<std::endl;
73  END DEBUG **/
74  }
75 
76 
77  int time_dir;
78  multi1d<int> block ;
79  multi1d<int> blockNum;
80  int Nblocks ;
81  };
82 
83 } // namespace Chroma
84 
85 #endif
Primary include file for CHROMA library code.
Function object used for constructing a block set.
Definition: block_subset.h:16
BlockFunc(const multi1d< int > &blk)
Definition: block_subset.h:18
int numSubsets() const
Definition: block_subset.h:34
BlockFunc(int dir, const multi1d< int > &blk)
Definition: block_subset.h:21
int operator()(const multi1d< int > &coordinate) const
Definition: block_subset.h:25
void init(const multi1d< int > &blk)
Definition: block_subset.h:41
multi1d< int > block
Definition: block_subset.h:78
multi1d< int > blockNum
Definition: block_subset.h:79
Nd
Definition: meslate.cc:74
Asqtad Staggered-Dirac operator.
Definition: klein_gord.cc:10
DComplex d
Definition: invbicg.cc:99
Complex b
Definition: invbicg.cc:96
int k
Definition: invbicg.cc:119