mirror of
				https://github.com/paboyle/Grid.git
				synced 2025-11-04 05:54:32 +00:00 
			
		
		
		
	Merge pull request #176 from guelpers/develop
Hadrons: full volume noise source for A2A
This commit is contained in:
		@@ -7,6 +7,7 @@ Source file: Hadrons/DilutedNoise.hpp
 | 
			
		||||
Copyright (C) 2015-2018
 | 
			
		||||
 | 
			
		||||
Author: Antonin Portelli <antonin.portelli@me.com>
 | 
			
		||||
Author: Vera Guelpers <Vera.Guelpers@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
 | 
			
		||||
@@ -55,6 +56,7 @@ public:
 | 
			
		||||
    GridCartesian                     *getGrid(void) const;
 | 
			
		||||
    // generate noise (pure virtual)
 | 
			
		||||
    virtual void generateNoise(GridParallelRNG &rng) = 0;
 | 
			
		||||
    virtual void generateNoise(GridParallelRNG &rng, unsigned int n_src) = 0;
 | 
			
		||||
private:
 | 
			
		||||
    std::vector<FermionField> noise_;
 | 
			
		||||
    GridCartesian             *grid_;
 | 
			
		||||
@@ -72,10 +74,28 @@ public:
 | 
			
		||||
    virtual ~TimeDilutedSpinColorDiagonalNoise(void) = default;
 | 
			
		||||
    // generate noise
 | 
			
		||||
    virtual void generateNoise(GridParallelRNG &rng);
 | 
			
		||||
    virtual void generateNoise(GridParallelRNG &rng, unsigned int n_src);
 | 
			
		||||
private:
 | 
			
		||||
    unsigned int nt_;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template <typename FImpl>
 | 
			
		||||
class FullVolumeSpinColorDiagonalNoise: public DilutedNoise<FImpl>
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    typedef typename FImpl::FermionField FermionField;
 | 
			
		||||
public:
 | 
			
		||||
    // constructor/destructor
 | 
			
		||||
    FullVolumeSpinColorDiagonalNoise(GridCartesian *g, unsigned int n_src);
 | 
			
		||||
    virtual ~FullVolumeSpinColorDiagonalNoise(void) = default;
 | 
			
		||||
    // generate noise
 | 
			
		||||
    virtual void generateNoise(GridParallelRNG &rng);
 | 
			
		||||
    virtual void generateNoise(GridParallelRNG &rng, unsigned int n_src);
 | 
			
		||||
public:
 | 
			
		||||
    unsigned int n_src;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/******************************************************************************
 | 
			
		||||
 *                    DilutedNoise template implementation                    *
 | 
			
		||||
 ******************************************************************************/
 | 
			
		||||
@@ -186,6 +206,61 @@ void TimeDilutedSpinColorDiagonalNoise<FImpl>::generateNoise(GridParallelRNG &rn
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename FImpl>
 | 
			
		||||
void TimeDilutedSpinColorDiagonalNoise<FImpl>::generateNoise(GridParallelRNG &rng, unsigned int n_src)
 | 
			
		||||
{
 | 
			
		||||
 assert(0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/******************************************************************************
 | 
			
		||||
 *        FullVolumeSpinColorDiagonalNoise template implementation           *
 | 
			
		||||
 ******************************************************************************/
 | 
			
		||||
template <typename FImpl>
 | 
			
		||||
FullVolumeSpinColorDiagonalNoise<FImpl>::
 | 
			
		||||
FullVolumeSpinColorDiagonalNoise(GridCartesian *g, unsigned int n_src)
 | 
			
		||||
: DilutedNoise<FImpl>(g)
 | 
			
		||||
{
 | 
			
		||||
    this->resize(n_src*Ns*FImpl::Dimension);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename FImpl>
 | 
			
		||||
void FullVolumeSpinColorDiagonalNoise<FImpl>::generateNoise(GridParallelRNG &rng)
 | 
			
		||||
{
 | 
			
		||||
    assert(0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename FImpl>
 | 
			
		||||
void FullVolumeSpinColorDiagonalNoise<FImpl>::generateNoise(GridParallelRNG &rng,unsigned int n_src)
 | 
			
		||||
{
 | 
			
		||||
    typedef decltype(peekColour((*this)[0], 0)) SpinField;
 | 
			
		||||
 | 
			
		||||
    auto                       &noise = *this;
 | 
			
		||||
    auto                       g      = this->getGrid();
 | 
			
		||||
    auto                       nd     = g->GlobalDimensions().size();
 | 
			
		||||
    auto                       nc     = FImpl::Dimension;
 | 
			
		||||
    Complex                    shift(1., 1.);
 | 
			
		||||
    LatticeComplex             eta(g);
 | 
			
		||||
    SpinField                  etas(g);
 | 
			
		||||
    unsigned int               i = 0;
 | 
			
		||||
 | 
			
		||||
    bernoulli(rng, eta);
 | 
			
		||||
    eta = (2.*eta - shift)*(1./::sqrt(2.));
 | 
			
		||||
    for (unsigned int n = 0; n < n_src; ++n)
 | 
			
		||||
    {
 | 
			
		||||
        for (unsigned int s = 0; s < Ns; ++s)
 | 
			
		||||
        {
 | 
			
		||||
            etas = zero;
 | 
			
		||||
            pokeSpin(etas, eta, s);
 | 
			
		||||
            for (unsigned int c = 0; c < nc; ++c)
 | 
			
		||||
            {
 | 
			
		||||
                noise[i] = zero;
 | 
			
		||||
                pokeColour(noise[i], etas, c);
 | 
			
		||||
                i++;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
END_HADRONS_NAMESPACE
 | 
			
		||||
 | 
			
		||||
#endif // Hadrons_DilutedNoise_hpp_
 | 
			
		||||
 
 | 
			
		||||
@@ -32,6 +32,7 @@
 | 
			
		||||
#include <Hadrons/Modules/MGauge/FundtoHirep.hpp>
 | 
			
		||||
#include <Hadrons/Modules/MGauge/StochEm.hpp>
 | 
			
		||||
#include <Hadrons/Modules/MNoise/TimeDilutedSpinColorDiagonal.hpp>
 | 
			
		||||
#include <Hadrons/Modules/MNoise/FullVolumeSpinColorDiagonal.hpp>
 | 
			
		||||
#include <Hadrons/Modules/MUtilities/PrecisionCast.hpp>
 | 
			
		||||
#include <Hadrons/Modules/MUtilities/RandomVectors.hpp>
 | 
			
		||||
#include <Hadrons/Modules/MUtilities/TestSeqGamma.hpp>
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										36
									
								
								Hadrons/Modules/MNoise/FullVolumeSpinColorDiagonal.cc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								Hadrons/Modules/MNoise/FullVolumeSpinColorDiagonal.cc
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,36 @@
 | 
			
		||||
/*************************************************************************************
 | 
			
		||||
 | 
			
		||||
Grid physics library, www.github.com/paboyle/Grid 
 | 
			
		||||
 | 
			
		||||
Source file: Hadrons/Modules/MNoise/FullVolumeSpinColorDiagonal.cc
 | 
			
		||||
 | 
			
		||||
Copyright (C) 2015-2018
 | 
			
		||||
 | 
			
		||||
Author: Antonin Portelli <antonin.portelli@me.com>
 | 
			
		||||
Author: Vera Guelpers <Vera.Guelpers@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 <Hadrons/Modules/MNoise/FullVolumeSpinColorDiagonal.hpp>
 | 
			
		||||
 | 
			
		||||
using namespace Grid;
 | 
			
		||||
using namespace Hadrons;
 | 
			
		||||
using namespace MNoise;
 | 
			
		||||
 | 
			
		||||
template class Grid::Hadrons::MNoise::TFullVolumeSpinColorDiagonal<FIMPL>;
 | 
			
		||||
template class Grid::Hadrons::MNoise::TFullVolumeSpinColorDiagonal<ZFIMPL>;
 | 
			
		||||
							
								
								
									
										121
									
								
								Hadrons/Modules/MNoise/FullVolumeSpinColorDiagonal.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										121
									
								
								Hadrons/Modules/MNoise/FullVolumeSpinColorDiagonal.hpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,121 @@
 | 
			
		||||
/*************************************************************************************
 | 
			
		||||
 | 
			
		||||
Grid physics library, www.github.com/paboyle/Grid 
 | 
			
		||||
 | 
			
		||||
Source file: Hadrons/Modules/MNoise/FullVolumeSpinColorDiagonal.hpp
 | 
			
		||||
 | 
			
		||||
Copyright (C) 2015-2018
 | 
			
		||||
 | 
			
		||||
Author: Antonin Portelli <antonin.portelli@me.com>
 | 
			
		||||
Author: Vera Guelpers <Vera.Guelpers@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 */
 | 
			
		||||
#ifndef Hadrons_MNoise_FullVolumeSpinColorDiagonal_hpp_
 | 
			
		||||
#define Hadrons_MNoise_FullVolumeSpinColorDiagonal_hpp_
 | 
			
		||||
 | 
			
		||||
#include <Hadrons/Global.hpp>
 | 
			
		||||
#include <Hadrons/Module.hpp>
 | 
			
		||||
#include <Hadrons/ModuleFactory.hpp>
 | 
			
		||||
#include <Hadrons/DilutedNoise.hpp>
 | 
			
		||||
 | 
			
		||||
BEGIN_HADRONS_NAMESPACE
 | 
			
		||||
 | 
			
		||||
/******************************************************************************
 | 
			
		||||
 *             Generate full volume spin-color diagonal noise                *
 | 
			
		||||
 ******************************************************************************/
 | 
			
		||||
BEGIN_MODULE_NAMESPACE(MNoise)
 | 
			
		||||
 | 
			
		||||
class FullVolumeSpinColorDiagonalPar: Serializable
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    GRID_SERIALIZABLE_CLASS_MEMBERS(FullVolumeSpinColorDiagonalPar,
 | 
			
		||||
                                    unsigned int, nsrc);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template <typename FImpl>
 | 
			
		||||
class TFullVolumeSpinColorDiagonal: public Module<FullVolumeSpinColorDiagonalPar>
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    FERM_TYPE_ALIASES(FImpl,);
 | 
			
		||||
public:
 | 
			
		||||
    // constructor
 | 
			
		||||
    TFullVolumeSpinColorDiagonal(const std::string name);
 | 
			
		||||
    // destructor
 | 
			
		||||
    virtual ~TFullVolumeSpinColorDiagonal(void) {};
 | 
			
		||||
    // dependency relation
 | 
			
		||||
    virtual std::vector<std::string> getInput(void);
 | 
			
		||||
    virtual std::vector<std::string> getOutput(void);
 | 
			
		||||
    // setup
 | 
			
		||||
    virtual void setup(void);
 | 
			
		||||
    // execution
 | 
			
		||||
    virtual void execute(void);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
MODULE_REGISTER_TMP(FullVolumeSpinColorDiagonal, TFullVolumeSpinColorDiagonal<FIMPL>, MNoise);
 | 
			
		||||
MODULE_REGISTER_TMP(ZFullVolumeSpinColorDiagonal, TFullVolumeSpinColorDiagonal<ZFIMPL>, MNoise);
 | 
			
		||||
 | 
			
		||||
/******************************************************************************
 | 
			
		||||
 *              TFullVolumeSpinColorDiagonal implementation                  *
 | 
			
		||||
 ******************************************************************************/
 | 
			
		||||
// constructor /////////////////////////////////////////////////////////////////
 | 
			
		||||
template <typename FImpl>
 | 
			
		||||
TFullVolumeSpinColorDiagonal<FImpl>::TFullVolumeSpinColorDiagonal(const std::string name)
 | 
			
		||||
: Module<FullVolumeSpinColorDiagonalPar>(name)
 | 
			
		||||
{}
 | 
			
		||||
 | 
			
		||||
// dependencies/products ///////////////////////////////////////////////////////
 | 
			
		||||
template <typename FImpl>
 | 
			
		||||
std::vector<std::string> TFullVolumeSpinColorDiagonal<FImpl>::getInput(void)
 | 
			
		||||
{
 | 
			
		||||
    std::vector<std::string> in;
 | 
			
		||||
    
 | 
			
		||||
    return in;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename FImpl>
 | 
			
		||||
std::vector<std::string> TFullVolumeSpinColorDiagonal<FImpl>::getOutput(void)
 | 
			
		||||
{
 | 
			
		||||
    std::vector<std::string> out = {getName()};
 | 
			
		||||
    
 | 
			
		||||
    return out;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// setup ///////////////////////////////////////////////////////////////////////
 | 
			
		||||
template <typename FImpl>
 | 
			
		||||
void TFullVolumeSpinColorDiagonal<FImpl>::setup(void)
 | 
			
		||||
{
 | 
			
		||||
    envCreateDerived(DilutedNoise<FImpl>, 
 | 
			
		||||
                     FullVolumeSpinColorDiagonalNoise<FImpl>,
 | 
			
		||||
                     getName(), 1, envGetGrid(FermionField), par().nsrc);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// execution ///////////////////////////////////////////////////////////////////
 | 
			
		||||
template <typename FImpl>
 | 
			
		||||
void TFullVolumeSpinColorDiagonal<FImpl>::execute(void)
 | 
			
		||||
{
 | 
			
		||||
    auto &noise = envGet(DilutedNoise<FImpl>, getName());
 | 
			
		||||
    LOG(Message) << "Generating full volume, spin-color diagonal noise" << std::endl;
 | 
			
		||||
    noise.generateNoise(rng4d(),par().nsrc);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
END_MODULE_NAMESPACE
 | 
			
		||||
 | 
			
		||||
END_HADRONS_NAMESPACE
 | 
			
		||||
 | 
			
		||||
#endif // Hadrons_MNoise_FullVolumeSpinColorDiagonal_hpp_
 | 
			
		||||
@@ -31,6 +31,7 @@ modules_cc =\
 | 
			
		||||
  Modules/MGauge/FundtoHirep.cc \
 | 
			
		||||
  Modules/MGauge/GaugeFix.cc \
 | 
			
		||||
  Modules/MNoise/TimeDilutedSpinColorDiagonal.cc \
 | 
			
		||||
  Modules/MNoise/FullVolumeSpinColorDiagonal.cc \
 | 
			
		||||
  Modules/MUtilities/RandomVectors.cc \
 | 
			
		||||
  Modules/MUtilities/TestSeqGamma.cc \
 | 
			
		||||
  Modules/MUtilities/PrecisionCast.cc \
 | 
			
		||||
@@ -102,6 +103,7 @@ modules_hpp =\
 | 
			
		||||
  Modules/MGauge/FundtoHirep.hpp \
 | 
			
		||||
  Modules/MGauge/StochEm.hpp \
 | 
			
		||||
  Modules/MNoise/TimeDilutedSpinColorDiagonal.hpp \
 | 
			
		||||
  Modules/MNoise/FullVolumeSpinColorDiagonal.hpp \
 | 
			
		||||
  Modules/MUtilities/PrecisionCast.hpp \
 | 
			
		||||
  Modules/MUtilities/RandomVectors.hpp \
 | 
			
		||||
  Modules/MUtilities/TestSeqGamma.hpp \
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user