#include #define NCOL 2 using namespace Grid; constexpr int Ndim = 3; typedef ScalarAdjMatrixImplTypes::Field SUNField; typedef typename SUNField::vector_object vobj; typedef CartesianStencil Stencil; int main(int argc, char **argv){ // Initialise grid ////////////////////////////////////////////// Grid_init(&argc,&argv); int threads = GridThread::GetThreads(); std::cout << GridLogMessage << "Grid is setup to use " << threads << " threads" << std::endl; // Module /////////////////////////////////////////////////////// GridModule GridMod; if (GridDefaultLatt().size() != Ndim){ std::cout << GridLogError << "Incorrect dimension of the grid\n. Expected dim=" << Ndim << std::endl; return EXIT_FAILURE; } if (GridDefaultMpi().size() != Ndim){ std::cout << GridLogError << "Incorrect dimension of the mpi grid\n. Expected dim=" << Ndim << std::endl; return EXIT_FAILURE; } GridMod.set_full(new GridCartesian(GridDefaultLatt(), GridDefaultSimd(Ndim, vComplex::Nsimd()), GridDefaultMpi())); GridMod.set_rb(new GridRedBlackCartesian(GridMod.get_full())); auto grid = GridMod.get_full(); GridParallelRNG pRNG(grid); pRNG.SeedFixedIntegers({11,84,79,47,90}); // Stencil ////////////////////////////////////////////////////// int npoint = 2 * Ndim; std::vector directions(npoint); std::vector displacements(npoint); for (int mu = 0; mu < Ndim; mu++){ directions[mu] = mu; directions[mu + Ndim] = mu; displacements[mu] = 1; displacements[mu + Ndim] = -1; } Stencil Stencil_phi(grid, npoint, 0, directions, displacements,0); SimpleCompressor compressor; // Field ///////////////////////////////////////////////////////// SUNField phi(grid); // MPI sublattice surface area /////////////////////////////////// int mpi_area = 0; int mpi_face; // Calculates the total surface area of an MPI hypercube for (int mu_ex=0;mu_ex