CHROMA
timeslice_io_cache.cc
Go to the documentation of this file.
1 /*! \file
2  * \brief LatticeColorVector time-slice IO cache
3  *
4  * LatticeColorVector time-slice IO cache
5  */
6 
8 
9 namespace Chroma
10 {
11  //----------------------------------------------------------------------------
12  // Constructor
13  TimeSliceIOCache::TimeSliceIOCache(QDP::MapObjectDisk< KeyTimeSliceColorVec_t,TimeSliceIO<LatticeColorVector> >& eigen_source_)
14  : eigen_source(eigen_source_)
15  {
16  const int Lt = Layout::lattSize()[Nd-1];
17 
18  // Figure out how many vectors are in the source
19  // We know time slice 0 has to be a part of the sources
20  num_vecs = 0;
21  while(1)
22  {
24  key.t_slice = 0;
25  key.colorvec = num_vecs;
26 
27  if (! eigen_source.exist(key)) {break;}
28 
29  ++num_vecs;
30  }
31 
32  if (num_vecs == 0)
33  {
34  QDPIO::cerr << __func__ << ": this is bad - did not find any eigenvectors in eigen_source\n";
35  QDP_abort(1);
36  }
37  else
38  {
39  QDPIO::cout << __func__ << ": found in eigenstd::vector source num_vecs= " << num_vecs << std::endl;
40  }
41 
42  eigen_cache.resize(num_vecs);
43  cache_marker.resize(Lt,num_vecs);
44 
45  for(int n=0; n < num_vecs; ++n)
46  {
47  eigen_cache[n] = zero;
48 
49  for(int t=0; t < Lt; ++t)
50  cache_marker(t,n) = false;
51  }
52  }
53 
54 
55  // Get a std::vector
56  LatticeColorVector& TimeSliceIOCache::getVec(int colorvec)
57  {
58  return eigen_cache[colorvec];
59  }
60 
61  // Get a std::vector
62  LatticeColorVector& TimeSliceIOCache::getVec(int t_actual, int colorvec)
63  {
64  // If not in cache, then retrieve
65  if (! cache_marker(t_actual,colorvec))
66  {
67  KeyTimeSliceColorVec_t key_vec;
68  key_vec.t_slice = t_actual;
69  key_vec.colorvec = colorvec;
70 
71  TimeSliceIO<LatticeColorVector> time_slice_io(eigen_cache[colorvec], t_actual);
72 
73  eigen_source.get(key_vec, time_slice_io);
74  cache_marker(t_actual,colorvec) = true;
75  }
76 
77  return eigen_cache[colorvec];
78  }
79 
80 } // namespace Chroma
virtual LatticeColorVector & getVec(int colorvec)
Get the whole std::vector.
multi1d< LatticeColorVector > eigen_cache
TimeSliceIOCache(QDP::MapObjectDisk< KeyTimeSliceColorVec_t, LatticeColorVector > &eigen_source_)
Constructor.
QDP::MapObjectDisk< KeyTimeSliceColorVec_t, TimeSliceIO< LatticeColorVector > > & eigen_source
MODS_t & eigen_source
Eigenvectors.
unsigned n
Definition: ldumul_w.cc:36
int t
Definition: meslate.cc:37
Nd
Definition: meslate.cc:74
Asqtad Staggered-Dirac operator.
Definition: klein_gord.cc:10
Double zero
Definition: invbicg.cc:106
LatticeColorVector time-slice IO cache.