diff --git a/lib/communicator/SharedMemoryMPI.cc b/lib/communicator/SharedMemoryMPI.cc index 1fa84dfb..d534a6d9 100644 --- a/lib/communicator/SharedMemoryMPI.cc +++ b/lib/communicator/SharedMemoryMPI.cc @@ -27,6 +27,7 @@ Author: Peter Boyle <paboyle@ph.ed.ac.uk> /* END LEGAL */ #include <Grid/GridCore.h> +#include <pwd.h> namespace Grid { @@ -288,7 +289,8 @@ void GlobalSharedMemory::SharedMemoryAllocate(uint64_t bytes, int flags) size_t size = bytes; - sprintf(shm_name,"/myGrid_mpi3_shm_%d_%d",WorldNode,r); + struct passwd *pw = getpwuid (getuid()); + sprintf(shm_name,"/Grid_%s_mpi3_shm_%d_%d",pw->pw_name,WorldNode,r); shm_unlink(shm_name); int fd=shm_open(shm_name,O_RDWR|O_CREAT,0666); @@ -323,7 +325,8 @@ void GlobalSharedMemory::SharedMemoryAllocate(uint64_t bytes, int flags) size_t size = bytes ; - sprintf(shm_name,"/Grid_mpi3_shm_%d_%d",WorldNode,r); + struct passwd *pw = getpwuid (getuid()); + sprintf(shm_name,"/Grid_%s_mpi3_shm_%d_%d",pw->pw_name,WorldNode,r); int fd=shm_open(shm_name,O_RDWR,0666); if ( fd<0 ) { perror("failed shm_open"); assert(0); } diff --git a/lib/lattice/Lattice_coordinate.h b/lib/lattice/Lattice_coordinate.h index 2e20ba17..19eceba8 100644 --- a/lib/lattice/Lattice_coordinate.h +++ b/lib/lattice/Lattice_coordinate.h @@ -52,23 +52,5 @@ namespace Grid { } }; - // LatticeCoordinate(); - // FIXME for debug; deprecate this; made obscelete by - template<class vobj> void lex_sites(Lattice<vobj> &l){ - Real *v_ptr = (Real *)&l._odata[0]; - size_t o_len = l._grid->oSites(); - size_t v_len = sizeof(vobj)/sizeof(vRealF); - size_t vec_len = vRealF::Nsimd(); - - for(int i=0;i<o_len;i++){ - for(int j=0;j<v_len;j++){ - for(int vv=0;vv<vec_len;vv+=2){ - v_ptr[i*v_len*vec_len+j*vec_len+vv ]= i+vv*500; - v_ptr[i*v_len*vec_len+j*vec_len+vv+1]= i+vv*500; - } - }} - } - - } #endif diff --git a/lib/lattice/Lattice_transfer.h b/lib/lattice/Lattice_transfer.h index 32c15d22..44f0337d 100644 --- a/lib/lattice/Lattice_transfer.h +++ b/lib/lattice/Lattice_transfer.h @@ -652,6 +652,7 @@ vectorizeFromLexOrdArray( std::vector<sobj> &in, Lattice<vobj> &out) template<class VobjOut, class VobjIn> void precisionChange(Lattice<VobjOut> &out, const Lattice<VobjIn> &in){ assert(out._grid->Nd() == in._grid->Nd()); + assert(out._grid->FullDimensions() == in._grid->FullDimensions()); out.checkerboard = in.checkerboard; GridBase *in_grid=in._grid; GridBase *out_grid = out._grid; diff --git a/lib/util/Init.cc b/lib/util/Init.cc index b4ac14b7..45a37a02 100644 --- a/lib/util/Init.cc +++ b/lib/util/Init.cc @@ -289,12 +289,7 @@ void Grid_init(int *argc,char ***argv) std::cout << "but WITHOUT ANY WARRANTY; without even the implied warranty of"<<std::endl; std::cout << "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the"<<std::endl; std::cout << "GNU General Public License for more details."<<std::endl; -#ifdef GITHASH - std::cout << "Current Grid git commit hash=" << GITHASH << std::endl; -#else - std::cout << "Current Grid git commit hash is undefined. Check makefile." << std::endl; -#endif -#undef GITHASH + printHash(); std::cout << std::endl; } diff --git a/lib/util/Init.h b/lib/util/Init.h index 3da00742..c8236dc6 100644 --- a/lib/util/Init.h +++ b/lib/util/Init.h @@ -61,6 +61,7 @@ namespace Grid { std::vector<int> &simd, std::vector<int> &mpi); + void printHash(void); }; #endif diff --git a/lib/util/version.cc b/lib/util/version.cc new file mode 100644 index 00000000..19759274 --- /dev/null +++ b/lib/util/version.cc @@ -0,0 +1,12 @@ +#include <iostream> +#include <version.h> +namespace Grid { + void printHash(){ +#ifdef GITHASH + std::cout << "Current Grid git commit hash=" << GITHASH << std::endl; +#else + std::cout << "Current Grid git commit hash is undefined. Check makefile." << std::endl; +#endif +#undef GITHASH +} +} diff --git a/tests/Test_dwf_mixedcg_prec.cc b/tests/Test_dwf_mixedcg_prec.cc index 2601b76c..0a8d6540 100644 --- a/tests/Test_dwf_mixedcg_prec.cc +++ b/tests/Test_dwf_mixedcg_prec.cc @@ -103,6 +103,27 @@ int main (int argc, char ** argv) std::cout << "Diff between mixed and regular CG: " << diff << std::endl; + std::string file1("./Propagator1"); + std::string file2("./Propagator2"); + emptyUserRecord record; + uint32_t nersc_csum; + uint32_t scidac_csuma; + uint32_t scidac_csumb; + typedef SpinColourVectorD FermionD; + typedef vSpinColourVectorD vFermionD; + + BinarySimpleMunger<FermionD,FermionD> munge; + std::string format = getFormatString<vFermionD>(); + BinaryIO::writeLatticeObject<vFermionD,FermionD>(result_o,file1,munge, 0, format, + nersc_csum,scidac_csuma,scidac_csumb); + + std::cout << " Mixed checksums "<<std::hex << scidac_csuma << " "<<scidac_csumb<<std::endl; + + BinaryIO::writeLatticeObject<vFermionD,FermionD>(result_o_2,file1,munge, 0, format, + nersc_csum,scidac_csuma,scidac_csumb); + + std::cout << " CG checksums "<<std::hex << scidac_csuma << " "<<scidac_csumb<<std::endl; + Grid_finalize(); } diff --git a/tests/core/Test_main.cc b/tests/core/Test_main.cc index a5f1bcd5..1fdc572f 100644 --- a/tests/core/Test_main.cc +++ b/tests/core/Test_main.cc @@ -393,7 +393,6 @@ int main(int argc, char **argv) { } random(Foo); */ - lex_sites(Foo); Integer mm[4]; mm[0] = 1; diff --git a/tests/forces/Test_gp_plaq_force.cc b/tests/forces/Test_gp_plaq_force.cc new file mode 100644 index 00000000..e121f21b --- /dev/null +++ b/tests/forces/Test_gp_plaq_force.cc @@ -0,0 +1,123 @@ + /************************************************************************************* + + Grid physics library, www.github.com/paboyle/Grid + + Source file: ./tests/Test_gp_rect_force.cc + + Copyright (C) 2015 + +Author: paboyle <paboyle@ph.ed.ac.uk> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + See the full license in the file "LICENSE" in the top level distribution directory + *************************************************************************************/ + /* END LEGAL */ +#include <Grid/Grid.h> + +using namespace std; +using namespace Grid; +using namespace Grid::QCD; + +int main (int argc, char ** argv) +{ + Grid_init(&argc,&argv); + + std::vector<int> latt_size = GridDefaultLatt(); + std::vector<int> simd_layout = GridDefaultSimd(Nd,vComplex::Nsimd()); + std::vector<int> mpi_layout = GridDefaultMpi(); + + GridCartesian Grid(latt_size,simd_layout,mpi_layout); + GridRedBlackCartesian RBGrid(&Grid); + + int threads = GridThread::GetThreads(); + std::cout<<GridLogMessage << "Grid is setup to use "<<threads<<" threads"<<std::endl; + + std::vector<int> seeds({1,2,3,4}); + + GridParallelRNG pRNG(&Grid); + pRNG.SeedFixedIntegers(std::vector<int>({45,12,81,9})); + + LatticeGaugeField U(&Grid); + + SU3::HotConfiguration(pRNG,U); + + double beta = 1.0; + double c1 = 0.331; + + //ConjugatePlaqPlusRectangleActionR Action(beta,c1); + ConjugateWilsonGaugeActionR Action(beta); + //WilsonGaugeActionR Action(beta); + + ComplexD S = Action.S(U); + + // get the deriv of phidag MdagM phi with respect to "U" + LatticeGaugeField UdSdU(&Grid); + + Action.deriv(U,UdSdU); + + //////////////////////////////////// + // Modify the gauge field a little + //////////////////////////////////// + RealD dt = 0.0001; + + LatticeColourMatrix mommu(&Grid); + LatticeColourMatrix forcemu(&Grid); + LatticeGaugeField mom(&Grid); + LatticeGaugeField Uprime(&Grid); + + for(int mu=0;mu<Nd;mu++){ + + SU3::GaussianFundamentalLieAlgebraMatrix(pRNG, mommu); // Traceless antihermitian momentum; gaussian in lie alg + + PokeIndex<LorentzIndex>(mom,mommu,mu); + + // fourth order exponential approx + parallel_for(auto i=mom.begin();i<mom.end();i++){ // exp(pmu dt) * Umu + Uprime[i](mu) = U[i](mu) + mom[i](mu)*U[i](mu)*dt ; + } + } + + ComplexD Sprime = Action.S(Uprime); + + ////////////////////////////////////////////// + // Use derivative to estimate dS + ////////////////////////////////////////////// + + LatticeComplex dS(&Grid); dS = zero; + + for(int mu=0;mu<Nd;mu++){ + + auto UdSdUmu = PeekIndex<LorentzIndex>(UdSdU,mu); + mommu = PeekIndex<LorentzIndex>(mom,mu); + + // Update gauge action density + // U = exp(p dt) U + // dU/dt = p U + // so dSdt = trace( dUdt dSdU) = trace( p UdSdUmu ) + + dS = dS - trace(mommu*UdSdUmu)*dt*2.0; + + } + ComplexD dSpred = sum(dS); + + std::cout << GridLogMessage << " S "<<S<<std::endl; + std::cout << GridLogMessage << " Sprime "<<Sprime<<std::endl; + std::cout << GridLogMessage << "dS "<<Sprime-S<<std::endl; + std::cout << GridLogMessage << "pred dS "<< dSpred <<std::endl; + assert( fabs(real(Sprime-S-dSpred)) < 1.0e-2 ) ; + std::cout<< GridLogMessage << "Done" <<std::endl; + Grid_finalize(); +}