mirror of
https://github.com/paboyle/Grid.git
synced 2025-04-09 21:50:45 +01:00
Merge branch 'develop' into feature/hadrons
This commit is contained in:
commit
e9323460c7
@ -27,6 +27,7 @@ Author: Peter Boyle <paboyle@ph.ed.ac.uk>
|
|||||||
/* END LEGAL */
|
/* END LEGAL */
|
||||||
|
|
||||||
#include <Grid/GridCore.h>
|
#include <Grid/GridCore.h>
|
||||||
|
#include <pwd.h>
|
||||||
|
|
||||||
namespace Grid {
|
namespace Grid {
|
||||||
|
|
||||||
@ -288,7 +289,8 @@ void GlobalSharedMemory::SharedMemoryAllocate(uint64_t bytes, int flags)
|
|||||||
|
|
||||||
size_t size = bytes;
|
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);
|
shm_unlink(shm_name);
|
||||||
int fd=shm_open(shm_name,O_RDWR|O_CREAT,0666);
|
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 ;
|
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);
|
int fd=shm_open(shm_name,O_RDWR,0666);
|
||||||
if ( fd<0 ) { perror("failed shm_open"); assert(0); }
|
if ( fd<0 ) { perror("failed shm_open"); assert(0); }
|
||||||
|
@ -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
|
#endif
|
||||||
|
@ -652,6 +652,7 @@ vectorizeFromLexOrdArray( std::vector<sobj> &in, Lattice<vobj> &out)
|
|||||||
template<class VobjOut, class VobjIn>
|
template<class VobjOut, class VobjIn>
|
||||||
void precisionChange(Lattice<VobjOut> &out, const Lattice<VobjIn> &in){
|
void precisionChange(Lattice<VobjOut> &out, const Lattice<VobjIn> &in){
|
||||||
assert(out._grid->Nd() == in._grid->Nd());
|
assert(out._grid->Nd() == in._grid->Nd());
|
||||||
|
assert(out._grid->FullDimensions() == in._grid->FullDimensions());
|
||||||
out.checkerboard = in.checkerboard;
|
out.checkerboard = in.checkerboard;
|
||||||
GridBase *in_grid=in._grid;
|
GridBase *in_grid=in._grid;
|
||||||
GridBase *out_grid = out._grid;
|
GridBase *out_grid = out._grid;
|
||||||
|
@ -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 << "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 << "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the"<<std::endl;
|
||||||
std::cout << "GNU General Public License for more details."<<std::endl;
|
std::cout << "GNU General Public License for more details."<<std::endl;
|
||||||
#ifdef GITHASH
|
printHash();
|
||||||
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
|
|
||||||
std::cout << std::endl;
|
std::cout << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -61,6 +61,7 @@ namespace Grid {
|
|||||||
std::vector<int> &simd,
|
std::vector<int> &simd,
|
||||||
std::vector<int> &mpi);
|
std::vector<int> &mpi);
|
||||||
|
|
||||||
|
void printHash(void);
|
||||||
|
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
12
lib/util/version.cc
Normal file
12
lib/util/version.cc
Normal file
@ -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
|
||||||
|
}
|
||||||
|
}
|
@ -103,6 +103,27 @@ int main (int argc, char ** argv)
|
|||||||
|
|
||||||
std::cout << "Diff between mixed and regular CG: " << diff << std::endl;
|
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();
|
Grid_finalize();
|
||||||
}
|
}
|
||||||
|
@ -393,7 +393,6 @@ int main(int argc, char **argv) {
|
|||||||
}
|
}
|
||||||
random(Foo);
|
random(Foo);
|
||||||
*/
|
*/
|
||||||
lex_sites(Foo);
|
|
||||||
|
|
||||||
Integer mm[4];
|
Integer mm[4];
|
||||||
mm[0] = 1;
|
mm[0] = 1;
|
||||||
|
123
tests/forces/Test_gp_plaq_force.cc
Normal file
123
tests/forces/Test_gp_plaq_force.cc
Normal file
@ -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();
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user