50 std::ifstream fin(file, std::ios::in | std::ios::binary);
53 field.data_start = fin.tellg();
65 field.dimension[0] =
header.Nx;
66 field.dimension[1] =
header.Ny;
67 field.dimension[2] =
header.Nz;
68 field.dimension[3] =
header.Nt;
72 std::cout <<
GridLogDebug <<
"file dimensions: " << field.dimension << std::endl;
75 for(
int d = 0; d <
Nd; d++)
78 field.plaquette =
header.plaq;
80 return field.data_start;
89 assert(
Ns == 4 and
Nd == 4 and
Nc == 3);
92 assert(grid !=
nullptr); assert(grid->_ndimension ==
Nd);
98 std::string format(
"IEEE64");
99 uint32_t nersc_csum, scidac_csuma, scidac_csumb;
105 typedef typename DoubleStoredGaugeField::vector_object::scalar_object sobj;
106 typedef typename DoubleStoredGaugeField::vector_object::Realified::scalar_type word;
110 std::vector<fobj> iodata(grid_openqcd->
lSites());
111 std::vector<sobj> scalardata(grid->lSites());
114 nersc_csum, scidac_csuma, scidac_csumb);
119 DoubleStoredGaugeField Umu_ds(grid);
126 grid->LocalIndexToLocalCoor(idx_g, coor);
128 bool isOdd = grid_rb->CheckerBoard(coor) == Odd;
132 int idx_o = (coor[Tdir] * ldim[Xdir] * ldim[Ydir] * ldim[Zdir]
133 + coor[Xdir] * ldim[Ydir] * ldim[Zdir]
134 + coor[Ydir] * ldim[Zdir]
137 munge(iodata[idx_o], scalardata[idx_g]);
140 grid->Barrier(); timer.
Stop();
141 std::cout << Grid::GridLogMessage <<
"OpenQcdIO::readConfiguration: munge overhead " << timer.
Elapsed() << std::endl;
147 grid->Barrier(); timer.
Stop();
148 std::cout << Grid::GridLogMessage <<
"OpenQcdIO::readConfiguration: vectorize overhead " << timer.
Elapsed() << std::endl;
154 grid->Barrier(); timer.
Stop();
155 std::cout << Grid::GridLogMessage <<
"OpenQcdIO::readConfiguration: redistribute overhead " << timer.
Elapsed() << std::endl;
159 RealD plaq_diff = fabs(clone.plaquette -
header.plaquette);
163 <<
" plaquette " << clone.plaquette
164 <<
" header " <<
header.plaquette
165 <<
" difference " << plaq_diff
170 RealD tol = precTol * std::sqrt(grid->_Nprocessors);
173 std::cout <<
" Plaquette mismatch (diff = " << plaq_diff <<
", tol = " << tol <<
")" << std::endl;
174 assert(plaq_diff < tol);
176 std::cout <<
GridLogMessage <<
"OpenQcd Configuration " << file <<
" and plaquette agree" << std::endl;
179 template<
class vsimd>
182 std::cout <<
GridLogError <<
"Writing to openQCD file format is not implemented" << std::endl;
200 std::swap(pcoor[
Xdir], pcoor[
Zdir]);
208 template<
class vsimd>
215 for(
int mu_g = 0; mu_g <
Nd; ++mu_g) {
216 int mu_o = (mu_g + 1) %
Nd;
AcceleratorVector< int, MaxDims > Coordinate
auto Cshift(const Expression &expr, int dim, int shift) -> decltype(closure(expr))
void PokeIndex(Lattice< vobj > &lhs, const Lattice< decltype(peekIndex< Index >(vobj(), 0))> &rhs, int i)
auto PeekIndex(const Lattice< vobj > &lhs, int i) -> Lattice< decltype(peekIndex< Index >(vobj(), i))>
std::enable_if< isSIMDvectorized< vobj >::value &&!isSIMDvectorized< sobj >::value, void >::type vectorizeFromLexOrdArray(std::vector< sobj > &in, Lattice< vobj > &out)
GridLogger GridLogError(1, "Error", GridLogColours, "RED")
GridLogger GridLogDebug(1, "Debug", GridLogColours, "PURPLE")
GridLogger GridLogMessage(1, "Message", GridLogColours, "NORMAL")
#define NAMESPACE_BEGIN(A)
iVector< iScalar< iMatrix< vtype, Nc > >, Nds > iDoubleStoredColourMatrix
iDoubleStoredColourMatrix< ComplexD > DoubleStoredColourMatrixD
static constexpr int Xdir
iVector< iScalar< iMatrix< vtype, Nc > >, Nd > iLorentzColourMatrix
static constexpr int Zdir
#define thread_for(i, num,...)
static INTERNAL_PRECISION U
static const int BINARYIO_READ
static void IOobject(word w, GridBase *grid, std::vector< fobj > &iodata, std::string file, uint64_t &offset, const std::string &format, int control, uint32_t &nersc_csum, uint32_t &scidac_csuma, uint32_t &scidac_csumb)
static const int BINARYIO_LEXICOGRAPHIC
Coordinate _processor_coor
const Coordinate & ThisProcessorCoor(void)
const Coordinate & ProcessorGrid(void)
unsigned long _ndimension
const Coordinate & GlobalDimensions(void)
const Coordinate & LocalDimensions(void)
GridTime Elapsed(void) const
static GridCartesian * createOpenQcdGrid(GridCartesian *grid)
static void writeConfiguration(Lattice< iLorentzColourMatrix< vsimd > > &Umu, std::string file)
static void readConfiguration(Lattice< iLorentzColourMatrix< vsimd > > &Umu, FieldMetaData &header, std::string file)
static int readHeader(std::string file, GridBase *grid, FieldMetaData &field)
static constexpr double normalisationFactor
static void undoDoubleStore(Lattice< iLorentzColourMatrix< vsimd > > &Umu, Lattice< iDoubleStoredColourMatrix< vsimd > > const &Umu_ds)
static GridRedBlackCartesian * makeFourDimRedBlackGrid(const GridCartesian *FourDimGrid)
static GridCartesian * makeFourDimGrid(const Coordinate &latt, const Coordinate &simd, const Coordinate &mpi)