mirror of
https://github.com/paboyle/Grid.git
synced 2025-04-10 06:00:45 +01:00
QED: fix stochastic field
This commit is contained in:
parent
bd6a228af6
commit
462921e549
@ -45,7 +45,7 @@ namespace QCD{
|
|||||||
void MomentumSpacePropagator(const GaugeField &in, GaugeField &out);
|
void MomentumSpacePropagator(const GaugeField &in, GaugeField &out);
|
||||||
void StochasticField(GaugeField &out, GridParallelRNG &rng);
|
void StochasticField(GaugeField &out, GridParallelRNG &rng);
|
||||||
private:
|
private:
|
||||||
void kHatSquared(GaugeLinkField &out);
|
void invKHatSquared(GaugeLinkField &out);
|
||||||
void zmSub(GaugeLinkField &out);
|
void zmSub(GaugeLinkField &out);
|
||||||
private:
|
private:
|
||||||
Gauge gauge_;
|
Gauge gauge_;
|
||||||
@ -71,13 +71,17 @@ namespace QCD{
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<class Gimpl>
|
template<class Gimpl>
|
||||||
void Photon<Gimpl>::kHatSquared(GaugeLinkField &out)
|
void Photon<Gimpl>::invKHatSquared(GaugeLinkField &out)
|
||||||
{
|
{
|
||||||
GridBase *grid = out._grid;
|
GridBase *grid = out._grid;
|
||||||
GaugeLinkField kmu(grid);
|
GaugeLinkField kmu(grid), one(grid);
|
||||||
const unsigned int nd = grid->_ndimension;
|
const unsigned int nd = grid->_ndimension;
|
||||||
std::vector<int> &l = grid->_fdimensions;
|
std::vector<int> &l = grid->_fdimensions;
|
||||||
|
std::vector<int> zm(nd,0);
|
||||||
|
TComplexD Tone = ComplexD(1.0,0.0);
|
||||||
|
TComplexD Tzero= ComplexD(0.0,0.0);
|
||||||
|
|
||||||
|
one = ComplexD(1.0,0.0);
|
||||||
out = zero;
|
out = zero;
|
||||||
for(int mu = 0; mu < nd; mu++)
|
for(int mu = 0; mu < nd; mu++)
|
||||||
{
|
{
|
||||||
@ -87,6 +91,9 @@ namespace QCD{
|
|||||||
kmu = 2.*sin(.5*twoPiL*kmu);
|
kmu = 2.*sin(.5*twoPiL*kmu);
|
||||||
out = out + kmu*kmu;
|
out = out + kmu*kmu;
|
||||||
}
|
}
|
||||||
|
pokeSite(Tone, out, zm);
|
||||||
|
out = one/out;
|
||||||
|
pokeSite(Tzero, out,zm);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class Gimpl>
|
template<class Gimpl>
|
||||||
@ -131,19 +138,10 @@ namespace QCD{
|
|||||||
GaugeField &out)
|
GaugeField &out)
|
||||||
{
|
{
|
||||||
GridBase *grid = out._grid;
|
GridBase *grid = out._grid;
|
||||||
const unsigned int nd = grid->_ndimension;
|
LatticeComplex k2Inv(grid);
|
||||||
LatticeComplex k2Inv(grid), one(grid);
|
|
||||||
|
|
||||||
one = ComplexD(1.0,0.0);
|
invKHatSquared(k2Inv);
|
||||||
kHatSquared(k2Inv);
|
zmSub(k2Inv);
|
||||||
|
|
||||||
std::vector<int> zm(nd,0);
|
|
||||||
TComplexD Tone = ComplexD(1.0,0.0);
|
|
||||||
TComplexD Tzero= ComplexD(0.0,0.0);
|
|
||||||
|
|
||||||
pokeSite(Tone, k2Inv, zm);
|
|
||||||
k2Inv = one/k2Inv;
|
|
||||||
pokeSite(Tzero, k2Inv,zm);
|
|
||||||
|
|
||||||
out = in*k2Inv;
|
out = in*k2Inv;
|
||||||
}
|
}
|
||||||
@ -153,16 +151,17 @@ namespace QCD{
|
|||||||
{
|
{
|
||||||
auto *grid = out._grid;
|
auto *grid = out._grid;
|
||||||
const unsigned int nd = grid->_ndimension;
|
const unsigned int nd = grid->_ndimension;
|
||||||
GaugeLinkField k2(grid), r(grid);
|
GaugeLinkField sqrtK2Inv(grid), r(grid);
|
||||||
GaugeField aTilde(grid);
|
GaugeField aTilde(grid);
|
||||||
FFT fft(grid);
|
FFT fft(grid);
|
||||||
|
|
||||||
kHatSquared(k2);
|
invKHatSquared(sqrtK2Inv);
|
||||||
zmSub(k2);
|
sqrtK2Inv = sqrt(real(sqrtK2Inv));
|
||||||
|
zmSub(sqrtK2Inv);
|
||||||
for(int mu = 0; mu < nd; mu++)
|
for(int mu = 0; mu < nd; mu++)
|
||||||
{
|
{
|
||||||
gaussian(rng, r);
|
gaussian(rng, r);
|
||||||
r = k2*r;
|
r = sqrtK2Inv*r;
|
||||||
pokeLorentz(aTilde, r, mu);
|
pokeLorentz(aTilde, r, mu);
|
||||||
}
|
}
|
||||||
fft.FFT_all_dim(out, aTilde, FFT::backward);
|
fft.FFT_all_dim(out, aTilde, FFT::backward);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user