mirror of
				https://github.com/paboyle/Grid.git
				synced 2025-11-04 14:04:32 +00:00 
			
		
		
		
	Merge remote-tracking branch 'upstream/develop' into feature/ddalphaamg
This commit is contained in:
		
							
								
								
									
										330
									
								
								tests/lanczos/Test_dwf_compressed_lanczos_reorg_synthetic.cc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										330
									
								
								tests/lanczos/Test_dwf_compressed_lanczos_reorg_synthetic.cc
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,330 @@
 | 
			
		||||
    /*************************************************************************************
 | 
			
		||||
 | 
			
		||||
    Grid physics library, www.github.com/paboyle/Grid 
 | 
			
		||||
 | 
			
		||||
    Source file: ./tests/Test_dwf_compressed_lanczos_reorg.cc
 | 
			
		||||
 | 
			
		||||
    Copyright (C) 2017
 | 
			
		||||
 | 
			
		||||
Author: Leans heavily on Christoph Lehner's code
 | 
			
		||||
Author: Peter Boyle <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 */
 | 
			
		||||
/*
 | 
			
		||||
 *  Reimplement the badly named "multigrid" lanczos as compressed Lanczos using the features 
 | 
			
		||||
 *  in Grid that were intended to be used to support blocked Aggregates, from
 | 
			
		||||
 */
 | 
			
		||||
#include <Grid/Grid.h>
 | 
			
		||||
#include <Grid/algorithms/iterative/ImplicitlyRestartedLanczos.h>
 | 
			
		||||
 | 
			
		||||
using namespace std;
 | 
			
		||||
using namespace Grid;
 | 
			
		||||
using namespace Grid::QCD;
 | 
			
		||||
 | 
			
		||||
template<class Fobj,class CComplex,int nbasis>
 | 
			
		||||
class ProjectedHermOp : public LinearFunction<Lattice<iVector<CComplex,nbasis > > > {
 | 
			
		||||
public:
 | 
			
		||||
  typedef iVector<CComplex,nbasis >           CoarseSiteVector;
 | 
			
		||||
  typedef Lattice<CoarseSiteVector>           CoarseField;
 | 
			
		||||
  typedef Lattice<CComplex>   CoarseScalar; // used for inner products on fine field
 | 
			
		||||
  typedef Lattice<Fobj>          FineField;
 | 
			
		||||
 | 
			
		||||
  LinearOperatorBase<FineField> &_Linop;
 | 
			
		||||
  Aggregation<Fobj,CComplex,nbasis> &_Aggregate;
 | 
			
		||||
 | 
			
		||||
  ProjectedHermOp(LinearOperatorBase<FineField>& linop,  Aggregation<Fobj,CComplex,nbasis> &aggregate) : 
 | 
			
		||||
    _Linop(linop),
 | 
			
		||||
    _Aggregate(aggregate)  {  };
 | 
			
		||||
 | 
			
		||||
  void operator()(const CoarseField& in, CoarseField& out) {
 | 
			
		||||
 | 
			
		||||
    GridBase *FineGrid = _Aggregate.FineGrid;
 | 
			
		||||
    FineField fin(FineGrid);
 | 
			
		||||
    FineField fout(FineGrid);
 | 
			
		||||
 | 
			
		||||
    _Aggregate.PromoteFromSubspace(in,fin);
 | 
			
		||||
    _Linop.HermOp(fin,fout);
 | 
			
		||||
    _Aggregate.ProjectToSubspace(out,fout);
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template<class Fobj,class CComplex,int nbasis>
 | 
			
		||||
class ProjectedFunctionHermOp : public LinearFunction<Lattice<iVector<CComplex,nbasis > > > {
 | 
			
		||||
public:
 | 
			
		||||
  typedef iVector<CComplex,nbasis >           CoarseSiteVector;
 | 
			
		||||
  typedef Lattice<CoarseSiteVector>           CoarseField;
 | 
			
		||||
  typedef Lattice<CComplex>   CoarseScalar; // used for inner products on fine field
 | 
			
		||||
  typedef Lattice<Fobj>          FineField;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  OperatorFunction<FineField>   & _poly;
 | 
			
		||||
  LinearOperatorBase<FineField> &_Linop;
 | 
			
		||||
  Aggregation<Fobj,CComplex,nbasis> &_Aggregate;
 | 
			
		||||
 | 
			
		||||
  ProjectedFunctionHermOp(OperatorFunction<FineField> & poly,LinearOperatorBase<FineField>& linop, 
 | 
			
		||||
			  Aggregation<Fobj,CComplex,nbasis> &aggregate) : 
 | 
			
		||||
    _poly(poly),
 | 
			
		||||
    _Linop(linop),
 | 
			
		||||
    _Aggregate(aggregate)  {  };
 | 
			
		||||
 | 
			
		||||
  void operator()(const CoarseField& in, CoarseField& out) {
 | 
			
		||||
 | 
			
		||||
    GridBase *FineGrid = _Aggregate.FineGrid;
 | 
			
		||||
 | 
			
		||||
    FineField fin(FineGrid) ;fin.checkerboard  =_Aggregate.checkerboard;
 | 
			
		||||
    FineField fout(FineGrid);fout.checkerboard =_Aggregate.checkerboard;
 | 
			
		||||
 | 
			
		||||
    _Aggregate.PromoteFromSubspace(in,fin);
 | 
			
		||||
    _poly(_Linop,fin,fout);
 | 
			
		||||
    _Aggregate.ProjectToSubspace(out,fout);
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Make serializable Lanczos params
 | 
			
		||||
 | 
			
		||||
template<class Fobj,class CComplex,int nbasis>
 | 
			
		||||
class CoarseFineIRL 
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
  typedef iVector<CComplex,nbasis >           CoarseSiteVector;
 | 
			
		||||
  typedef Lattice<CComplex>                   CoarseScalar; // used for inner products on fine field
 | 
			
		||||
  typedef Lattice<CoarseSiteVector>           CoarseField;
 | 
			
		||||
  typedef Lattice<Fobj>                       FineField;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
  GridBase *_CoarseGrid;
 | 
			
		||||
  GridBase *_FineGrid;
 | 
			
		||||
  int _checkerboard;
 | 
			
		||||
  LinearOperatorBase<FineField>                 & _FineOp;
 | 
			
		||||
  Aggregation<Fobj,CComplex,nbasis>               _Aggregate; 
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
  CoarseFineIRL(GridBase *FineGrid,
 | 
			
		||||
		GridBase *CoarseGrid,
 | 
			
		||||
		LinearOperatorBase<FineField> &FineOp,
 | 
			
		||||
		int checkerboard) :
 | 
			
		||||
    _CoarseGrid(CoarseGrid),
 | 
			
		||||
    _FineGrid(FineGrid),
 | 
			
		||||
    _Aggregate(CoarseGrid,FineGrid,checkerboard),
 | 
			
		||||
    _FineOp(FineOp),
 | 
			
		||||
    _checkerboard(checkerboard)
 | 
			
		||||
  {};
 | 
			
		||||
 | 
			
		||||
  template<typename T>  static RealD normalise(T& v) 
 | 
			
		||||
  {
 | 
			
		||||
    RealD nn = norm2(v);
 | 
			
		||||
    nn = ::sqrt(nn);
 | 
			
		||||
    v = v * (1.0/nn);
 | 
			
		||||
    return nn;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  void testFine(void)
 | 
			
		||||
  {
 | 
			
		||||
    int Nk = nbasis;
 | 
			
		||||
    _Aggregate.subspace.resize(Nk,_FineGrid);
 | 
			
		||||
    _Aggregate.subspace[0]=1.0;
 | 
			
		||||
    _Aggregate.subspace[0].checkerboard=_checkerboard;
 | 
			
		||||
    normalise(_Aggregate.subspace[0]);
 | 
			
		||||
    PlainHermOp<FineField>    Op(_FineOp);
 | 
			
		||||
    for(int k=1;k<Nk;k++){
 | 
			
		||||
      Op(_Aggregate.subspace[k-1],_Aggregate.subspace[k]);
 | 
			
		||||
      normalise(_Aggregate.subspace[k]);
 | 
			
		||||
      std::cout << GridLogMessage << "testFine subspace "<<k<<" " <<norm2(_Aggregate.subspace[k])<<std::endl;
 | 
			
		||||
    }
 | 
			
		||||
    for(int k=0;k<Nk;k++){
 | 
			
		||||
      std::cout << GridLogMessage << "testFine subspace "<<k<<"  cb " <<_Aggregate.subspace[k].checkerboard<<std::endl;
 | 
			
		||||
    }
 | 
			
		||||
    _Aggregate.Orthogonalise();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  void calcFine(RealD alpha, RealD beta,int Npoly,int Nm,RealD resid, 
 | 
			
		||||
		RealD MaxIt, RealD betastp, int MinRes)
 | 
			
		||||
  {
 | 
			
		||||
    assert(nbasis<=Nm);
 | 
			
		||||
    Chebyshev<FineField>      Cheby(alpha,beta,Npoly);
 | 
			
		||||
    FunctionHermOp<FineField> ChebyOp(Cheby,_FineOp);
 | 
			
		||||
    PlainHermOp<FineField>    Op(_FineOp);
 | 
			
		||||
 | 
			
		||||
    int Nk = nbasis;
 | 
			
		||||
 | 
			
		||||
    std::vector<RealD>          eval(Nm);
 | 
			
		||||
 | 
			
		||||
    FineField src(_FineGrid); src=1.0; src.checkerboard = _checkerboard;
 | 
			
		||||
 | 
			
		||||
    ImplicitlyRestartedLanczos<FineField> IRL(ChebyOp,Op,Nk,Nk,Nm,resid,MaxIt,betastp,MinRes);
 | 
			
		||||
    _Aggregate.subspace.resize(Nm,_FineGrid);
 | 
			
		||||
    IRL.calc(eval,_Aggregate.subspace,src,Nk,false);
 | 
			
		||||
    _Aggregate.subspace.resize(Nk,_FineGrid);
 | 
			
		||||
    for(int k=0;k<Nk;k++){
 | 
			
		||||
      std::cout << GridLogMessage << "testFine subspace "<<k<<"  cb " <<_Aggregate.subspace[k].checkerboard<<std::endl;
 | 
			
		||||
    }
 | 
			
		||||
    _Aggregate.Orthogonalise();
 | 
			
		||||
  }
 | 
			
		||||
  void calcCoarse(RealD alpha, RealD beta,int Npoly,
 | 
			
		||||
		  int Nk, int Nm,RealD resid, 
 | 
			
		||||
		  RealD MaxIt, RealD betastp, int MinRes)
 | 
			
		||||
  {
 | 
			
		||||
    Chebyshev<FineField>                          Cheby(alpha,beta,Npoly);
 | 
			
		||||
    ProjectedHermOp<Fobj,CComplex,nbasis>         Op(_FineOp,_Aggregate);
 | 
			
		||||
    ProjectedFunctionHermOp<Fobj,CComplex,nbasis> ChebyOp(Cheby,_FineOp,_Aggregate);
 | 
			
		||||
 | 
			
		||||
    std::vector<RealD>          eval(Nm);
 | 
			
		||||
    std::vector<CoarseField>    evec(Nm,_CoarseGrid);
 | 
			
		||||
 | 
			
		||||
    CoarseField src(_CoarseGrid);     src=1.0; 
 | 
			
		||||
 | 
			
		||||
    ImplicitlyRestartedLanczos<CoarseField> IRL(ChebyOp,ChebyOp,Nk,Nk,Nm,resid,MaxIt,betastp,MinRes);
 | 
			
		||||
    IRL.calc(eval,evec,src,Nk,false);
 | 
			
		||||
 | 
			
		||||
    // We got the evalues of the Cheby operator;
 | 
			
		||||
    // Reconstruct eigenvalues of original operator via Chebyshev inverse
 | 
			
		||||
    for (int i=0;i<Nk;i++){
 | 
			
		||||
 | 
			
		||||
      RealD eval_guess;
 | 
			
		||||
      if (i==0) eval_guess = 0;
 | 
			
		||||
      else      eval[i-1]  = 0;
 | 
			
		||||
 | 
			
		||||
      RealD eval_poly  = eval[i];
 | 
			
		||||
      RealD eval_op    = Cheby.approxInv(eval_poly,eval_guess,100,1e-10);
 | 
			
		||||
      std::cout << i << " Reconstructed eval = " << eval_op << " from quess " << eval_op << std::endl;
 | 
			
		||||
      eval[i] = eval_op;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct LanczosParams : Serializable {
 | 
			
		||||
 public:
 | 
			
		||||
  GRID_SERIALIZABLE_CLASS_MEMBERS(LanczosParams,
 | 
			
		||||
				  RealD, alpha, 
 | 
			
		||||
				  RealD, beta,
 | 
			
		||||
				  int, Npoly,
 | 
			
		||||
				  int, Nk,
 | 
			
		||||
				  int, Nm,
 | 
			
		||||
				  RealD, resid, 
 | 
			
		||||
				  int, MaxIt, 
 | 
			
		||||
				  RealD, betastp, 
 | 
			
		||||
				  int, MinRes);
 | 
			
		||||
};
 | 
			
		||||
struct CompressedLanczosParams : Serializable {
 | 
			
		||||
 public:
 | 
			
		||||
  GRID_SERIALIZABLE_CLASS_MEMBERS(CompressedLanczosParams,
 | 
			
		||||
				  LanczosParams, FineParams,
 | 
			
		||||
				  LanczosParams, CoarseParams,
 | 
			
		||||
				  std::vector<int>, blockSize,
 | 
			
		||||
				  std::string, config,
 | 
			
		||||
				  std::vector < std::complex<double>  >, omega,
 | 
			
		||||
				  RealD, mass,
 | 
			
		||||
				  RealD, M5
 | 
			
		||||
				  );
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
int main (int argc, char ** argv) {
 | 
			
		||||
 | 
			
		||||
  Grid_init(&argc,&argv);
 | 
			
		||||
 | 
			
		||||
  CompressedLanczosParams Params;
 | 
			
		||||
  {
 | 
			
		||||
    Params.omega.resize(10);
 | 
			
		||||
    Params.blockSize.resize(5);
 | 
			
		||||
    XmlWriter writer("Params_template.xml");
 | 
			
		||||
    write(writer,"Params",Params);
 | 
			
		||||
    std::cout << GridLogMessage << " Written Params_template.xml" <<std::endl;
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  { 
 | 
			
		||||
    XmlReader reader("./Params.xml");
 | 
			
		||||
    read(reader, "Params", Params);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  int     Ls = (int)Params.omega.size();
 | 
			
		||||
  RealD mass = Params.mass;
 | 
			
		||||
  RealD M5   = Params.M5;
 | 
			
		||||
  std::vector<int> blockSize = Params.blockSize;
 | 
			
		||||
 | 
			
		||||
  // Grids
 | 
			
		||||
  GridCartesian         * UGrid   = SpaceTimeGrid::makeFourDimGrid(GridDefaultLatt(), GridDefaultSimd(Nd,vComplex::Nsimd()),GridDefaultMpi());
 | 
			
		||||
  GridRedBlackCartesian * UrbGrid   = SpaceTimeGrid::makeFourDimRedBlackGrid(UGrid);
 | 
			
		||||
  GridCartesian         * FGrid     = SpaceTimeGrid::makeFiveDimGrid(Ls,UGrid);
 | 
			
		||||
  GridRedBlackCartesian * FrbGrid   = SpaceTimeGrid::makeFiveDimRedBlackGrid(Ls,UGrid);
 | 
			
		||||
 | 
			
		||||
  std::vector<int> fineLatt     = GridDefaultLatt();
 | 
			
		||||
  int dims=fineLatt.size();
 | 
			
		||||
  assert(blockSize.size()==dims+1);
 | 
			
		||||
  std::vector<int> coarseLatt(dims);
 | 
			
		||||
  std::vector<int> coarseLatt5d ;
 | 
			
		||||
 | 
			
		||||
  for (int d=0;d<coarseLatt.size();d++){
 | 
			
		||||
    coarseLatt[d] = fineLatt[d]/blockSize[d];    assert(coarseLatt[d]*blockSize[d]==fineLatt[d]);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  std::cout << GridLogMessage<< " 5d coarse lattice is ";
 | 
			
		||||
  for (int i=0;i<coarseLatt.size();i++){
 | 
			
		||||
    std::cout << coarseLatt[i]<<"x";
 | 
			
		||||
  } 
 | 
			
		||||
  int cLs = Ls/blockSize[dims]; assert(cLs*blockSize[dims]==Ls);
 | 
			
		||||
  std::cout << cLs<<std::endl;
 | 
			
		||||
  
 | 
			
		||||
  GridCartesian         * CoarseGrid4    = SpaceTimeGrid::makeFourDimGrid(coarseLatt, GridDefaultSimd(Nd,vComplex::Nsimd()),GridDefaultMpi());
 | 
			
		||||
  GridRedBlackCartesian * CoarseGrid4rb  = SpaceTimeGrid::makeFourDimRedBlackGrid(CoarseGrid4);
 | 
			
		||||
  GridCartesian         * CoarseGrid5    = SpaceTimeGrid::makeFiveDimGrid(cLs,CoarseGrid4);
 | 
			
		||||
  GridRedBlackCartesian * CoarseGrid5rb  = SpaceTimeGrid::makeFourDimRedBlackGrid(CoarseGrid5);
 | 
			
		||||
 | 
			
		||||
  // Gauge field
 | 
			
		||||
  LatticeGaugeField Umu(UGrid);
 | 
			
		||||
  //  FieldMetaData header;
 | 
			
		||||
  //  NerscIO::readConfiguration(Umu,header,Params.config);
 | 
			
		||||
  {
 | 
			
		||||
    std::vector<int> seeds4({1,2,3,4});
 | 
			
		||||
    GridParallelRNG          RNG4(UGrid);  RNG4.SeedFixedIntegers(seeds4);
 | 
			
		||||
    SU3::HotConfiguration(RNG4, Umu);
 | 
			
		||||
  }
 | 
			
		||||
  std::cout << GridLogMessage << "Lattice dimensions: " << GridDefaultLatt() << "   Ls: " << Ls << std::endl;
 | 
			
		||||
 | 
			
		||||
  // ZMobius EO Operator
 | 
			
		||||
  ZMobiusFermionR Ddwf(Umu, *FGrid, *FrbGrid, *UGrid, *UrbGrid, mass, M5, Params.omega,1.,0.);
 | 
			
		||||
  SchurDiagTwoOperator<ZMobiusFermionR,LatticeFermion> HermOp(Ddwf);
 | 
			
		||||
 | 
			
		||||
  // Eigenvector storage
 | 
			
		||||
  LanczosParams fine  =Params.FineParams;  
 | 
			
		||||
  LanczosParams coarse=Params.CoarseParams;  
 | 
			
		||||
  const int Nm1 = fine.Nm;
 | 
			
		||||
  const int Nm2 = coarse.Nm;
 | 
			
		||||
 | 
			
		||||
  std::cout << GridLogMessage << "Keep " << fine.Nk   << " full vectors" << std::endl;
 | 
			
		||||
  std::cout << GridLogMessage << "Keep " << coarse.Nk << " total vectors" << std::endl;
 | 
			
		||||
  assert(Nm2 >= Nm1);
 | 
			
		||||
 | 
			
		||||
  const int nbasis= 70;
 | 
			
		||||
  CoarseFineIRL<vSpinColourVector,vTComplex,nbasis> IRL(FrbGrid,CoarseGrid5rb,HermOp,Odd);
 | 
			
		||||
 | 
			
		||||
  std::cout << GridLogMessage << "Constructed CoarseFine IRL" << std::endl;
 | 
			
		||||
 | 
			
		||||
  std::cout << GridLogMessage << "Performing fine grid IRL Nk "<< nbasis<<" Nm "<<Nm1<< std::endl;
 | 
			
		||||
  IRL.testFine();
 | 
			
		||||
  //  IRL.calcFine(fine.alpha,fine.beta,fine.Npoly,fine.Nm,fine.resid, fine.MaxIt, fine.betastp, fine.MinRes);
 | 
			
		||||
 | 
			
		||||
  std::cout << GridLogMessage << "Performing coarse grid (poly) IRL " << nbasis<<" Nm "<<Nm2<< std::endl;
 | 
			
		||||
  IRL.calcCoarse(coarse.alpha,coarse.beta,coarse.Npoly,coarse.Nk,coarse.Nm,coarse.resid, coarse.MaxIt, coarse.betastp, coarse.MinRes);
 | 
			
		||||
 | 
			
		||||
  //  IRL.smoothedCoarseEigenvalues();
 | 
			
		||||
 | 
			
		||||
  Grid_finalize();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -72,14 +72,17 @@ int main (int argc, char ** argv)
 | 
			
		||||
  int nrhs = 1;
 | 
			
		||||
  int me;
 | 
			
		||||
  for(int i=0;i<mpi_layout.size();i++) nrhs *= (mpi_layout[i]/mpi_split[i]);
 | 
			
		||||
 | 
			
		||||
  std::cout << GridLogMessage << "Creating split grids " <<std::endl;
 | 
			
		||||
  GridCartesian         * SGrid = new GridCartesian(GridDefaultLatt(),
 | 
			
		||||
						    GridDefaultSimd(Nd,vComplex::Nsimd()),
 | 
			
		||||
						    mpi_split,
 | 
			
		||||
						    *UGrid,me); 
 | 
			
		||||
  std::cout << GridLogMessage <<"Creating split ferm grids " <<std::endl;
 | 
			
		||||
 | 
			
		||||
  GridCartesian         * SFGrid   = SpaceTimeGrid::makeFiveDimGrid(Ls,SGrid);
 | 
			
		||||
  std::cout << GridLogMessage <<"Creating split rb grids " <<std::endl;
 | 
			
		||||
  GridRedBlackCartesian * SrbGrid  = SpaceTimeGrid::makeFourDimRedBlackGrid(SGrid);
 | 
			
		||||
  std::cout << GridLogMessage <<"Creating split ferm rb grids " <<std::endl;
 | 
			
		||||
  GridRedBlackCartesian * SFrbGrid = SpaceTimeGrid::makeFiveDimRedBlackGrid(Ls,SGrid);
 | 
			
		||||
  std::cout << GridLogMessage << "Made the grids"<<std::endl;
 | 
			
		||||
  ///////////////////////////////////////////////
 | 
			
		||||
@@ -119,7 +122,7 @@ int main (int argc, char ** argv)
 | 
			
		||||
  GridParallelRNG pRNG5(FGrid);  pRNG5.SeedFixedIntegers(seeds);
 | 
			
		||||
  for(int s=0;s<nrhs;s++) {
 | 
			
		||||
    random(pRNG5,src[s]);
 | 
			
		||||
    tmp = 100.0*s;
 | 
			
		||||
    tmp = 10.0*s;
 | 
			
		||||
    src[s] = (src[s] * 0.1) + tmp;
 | 
			
		||||
    std::cout << GridLogMessage << " src ["<<s<<"] "<<norm2(src[s])<<std::endl;
 | 
			
		||||
  }
 | 
			
		||||
@@ -133,7 +136,7 @@ int main (int argc, char ** argv)
 | 
			
		||||
    pRNG.SeedFixedIntegers(seeds);
 | 
			
		||||
    std::cout << GridLogMessage << "Intialised 4D RNG "<<std::endl;
 | 
			
		||||
    SU3::HotConfiguration(pRNG,Umu);
 | 
			
		||||
    std::cout << "Intialised the HOT Gauge Field"<<std::endl;
 | 
			
		||||
    std::cout << GridLogMessage << "Intialised the HOT Gauge Field"<<std::endl;
 | 
			
		||||
    //    std::cout << " Site zero "<< Umu._odata[0]   <<std::endl;
 | 
			
		||||
  } else { 
 | 
			
		||||
    SU3::ColdConfiguration(Umu);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user