mirror of
https://github.com/paboyle/Grid.git
synced 2025-04-10 22:20:45 +01:00
Debugged set_fj,
to be fixed: BUG in imag()
This commit is contained in:
parent
565e9329ba
commit
092fa0d8da
@ -63,7 +63,6 @@ namespace Grid {
|
|||||||
colour["WHITE"] ="\033[37m";
|
colour["WHITE"] ="\033[37m";
|
||||||
colour["NORMAL"] ="\033[0;39m";
|
colour["NORMAL"] ="\033[0;39m";
|
||||||
} else {
|
} else {
|
||||||
std::cout << "Switching off colours\n";
|
|
||||||
colour["BLACK"] ="";
|
colour["BLACK"] ="";
|
||||||
colour["RED"] ="";
|
colour["RED"] ="";
|
||||||
colour["GREEN"] ="";
|
colour["GREEN"] ="";
|
||||||
|
@ -117,10 +117,10 @@ namespace Grid{
|
|||||||
GaugeField force(U._grid);
|
GaugeField force(U._grid);
|
||||||
GaugeField& Us = Smearer.get_U(as[level].actions.at(a)->is_smeared);
|
GaugeField& Us = Smearer.get_U(as[level].actions.at(a)->is_smeared);
|
||||||
as[level].actions.at(a)->deriv(Us,force); // deriv should not include Ta
|
as[level].actions.at(a)->deriv(Us,force); // deriv should not include Ta
|
||||||
std::cout<<GridLogIntegrator<< "Smearing (on/off): "<<as[level].actions.at(a)->is_smeared <<std::endl;
|
std::cout<< GridLogIntegrator << "Smearing (on/off): "<<as[level].actions.at(a)->is_smeared <<std::endl;
|
||||||
if (as[level].actions.at(a)->is_smeared) Smearer.smeared_force(force);
|
if (as[level].actions.at(a)->is_smeared) Smearer.smeared_force(force);
|
||||||
force = Ta(force);
|
force = Ta(force);
|
||||||
std::cout<<GridLogIntegrator<< "Force average: "<< norm2(force)/(U._grid->gSites()) <<std::endl;
|
std::cout<< GridLogIntegrator << "Force average: "<< norm2(force)/(U._grid->gSites()) <<std::endl;
|
||||||
Mom = Mom - force*ep;
|
Mom = Mom - force*ep;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -130,7 +130,7 @@ namespace Grid{
|
|||||||
|
|
||||||
t_U+=ep;
|
t_U+=ep;
|
||||||
int fl = levels-1;
|
int fl = levels-1;
|
||||||
std::cout<<GridLogIntegrator<<" "<<"["<<fl<<"] U " << " dt "<< ep <<" : t_U "<< t_U <<std::endl;
|
std::cout<< GridLogIntegrator <<" "<<"["<<fl<<"] U " << " dt "<< ep <<" : t_U "<< t_U <<std::endl;
|
||||||
|
|
||||||
}
|
}
|
||||||
void update_U(GaugeField &Mom, GaugeField&U, double ep){
|
void update_U(GaugeField &Mom, GaugeField&U, double ep){
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
#ifndef APE_SMEAR_
|
#ifndef APE_SMEAR_
|
||||||
#define APE_SMEAR_
|
#define APE_SMEAR_
|
||||||
|
|
||||||
namespace Grid {
|
namespace Grid {
|
||||||
namespace QCD {
|
namespace QCD {
|
||||||
|
|
||||||
|
|
||||||
@ -56,16 +56,18 @@ namespace Grid {
|
|||||||
// save the Cup link-field on the u_smr gauge-field
|
// save the Cup link-field on the u_smr gauge-field
|
||||||
pokeLorentz(u_smr, adj(Cup), mu); // u_smr[mu] = Cup^dag
|
pokeLorentz(u_smr, adj(Cup), mu); // u_smr[mu] = Cup^dag
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
void derivative(GaugeField& SigmaTerm,
|
void derivative(GaugeField& SigmaTerm,
|
||||||
const GaugeField& iLambda,
|
const GaugeField& iLambda,
|
||||||
const GaugeField& U)const{
|
const GaugeField& U)const{
|
||||||
|
|
||||||
// Reference
|
// Reference
|
||||||
// Morningstar, Peardon, Phys.Rev.D69,054501(2004)
|
// Morningstar, Peardon, Phys.Rev.D69,054501(2004)
|
||||||
// Equation 75
|
// Equation 75
|
||||||
|
// Computing Sigma_mu, derivative of S[fat links] with respect to the thin links
|
||||||
|
// Output SigmaTerm
|
||||||
|
|
||||||
GridBase *grid = U._grid;
|
GridBase *grid = U._grid;
|
||||||
int vol = U._grid->gSites();
|
int vol = U._grid->gSites();
|
||||||
@ -120,9 +122,9 @@ namespace Grid {
|
|||||||
Gimpl::AddGaugeLink(SigmaTerm, sh_field, mu);
|
Gimpl::AddGaugeLink(SigmaTerm, sh_field, mu);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
#ifndef GAUGE_CONFIG_
|
#ifndef GAUGE_CONFIG_
|
||||||
#define GAUGE_CONFIG_
|
#define GAUGE_CONFIG_
|
||||||
|
|
||||||
namespace Grid {
|
namespace Grid {
|
||||||
|
|
||||||
namespace QCD {
|
namespace QCD {
|
||||||
|
|
||||||
@ -49,15 +49,16 @@ namespace Grid {
|
|||||||
StoutSmearing.smear(SmearedSet[smearLvl],previous_u);
|
StoutSmearing.smear(SmearedSet[smearLvl],previous_u);
|
||||||
previous_u = SmearedSet[smearLvl];
|
previous_u = SmearedSet[smearLvl];
|
||||||
|
|
||||||
|
// For debug purposes
|
||||||
RealD impl_plaq = WilsonLoops<Gimpl>::avgPlaquette(previous_u);
|
RealD impl_plaq = WilsonLoops<Gimpl>::avgPlaquette(previous_u);
|
||||||
std::cout<< GridLogDebug << "[SmearedConfiguration] Plaq: " << impl_plaq<< std::endl;
|
std::cout<< GridLogDebug << "[SmearedConfiguration] Plaq: " << impl_plaq<< std::endl;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//====================================================================
|
//====================================================================
|
||||||
GaugeField AnalyticSmearedForce(const GaugeField& SigmaKPrime,
|
GaugeField AnalyticSmearedForce(const GaugeField& SigmaKPrime,
|
||||||
const GaugeField& GaugeK) const{
|
const GaugeField& GaugeK) const{
|
||||||
GridBase *grid = GaugeK._grid;
|
GridBase *grid = GaugeK._grid;
|
||||||
GaugeField C(grid), SigmaK(grid), iLambda(grid);
|
GaugeField C(grid), SigmaK(grid), iLambda(grid);
|
||||||
@ -79,13 +80,13 @@ namespace Grid {
|
|||||||
}
|
}
|
||||||
StoutSmearing.derivative(SigmaK, iLambda, GaugeK);// derivative of SmearBase
|
StoutSmearing.derivative(SigmaK, iLambda, GaugeK);// derivative of SmearBase
|
||||||
return SigmaK;
|
return SigmaK;
|
||||||
}
|
}
|
||||||
/*! @brief Returns smeared configuration at level 'Level' */
|
/*! @brief Returns smeared configuration at level 'Level' */
|
||||||
const GaugeField& get_smeared_conf(int Level) const{
|
const GaugeField& get_smeared_conf(int Level) const{
|
||||||
return SmearedSet[Level];
|
return SmearedSet[Level];
|
||||||
}
|
}
|
||||||
//====================================================================
|
//====================================================================
|
||||||
void set_iLambda(GaugeLinkField& iLambda,
|
void set_iLambda(GaugeLinkField& iLambda,
|
||||||
GaugeLinkField& e_iQ,
|
GaugeLinkField& e_iQ,
|
||||||
const GaugeLinkField& iQ,
|
const GaugeLinkField& iQ,
|
||||||
const GaugeLinkField& Sigmap,
|
const GaugeLinkField& Sigmap,
|
||||||
@ -103,9 +104,9 @@ namespace Grid {
|
|||||||
LatticeComplex r01(grid), r11(grid), r21(grid), r02(grid), r12(grid);
|
LatticeComplex r01(grid), r11(grid), r21(grid), r02(grid), r12(grid);
|
||||||
LatticeComplex r22(grid), tr1(grid), tr2(grid);
|
LatticeComplex r22(grid), tr1(grid), tr2(grid);
|
||||||
LatticeComplex b10(grid), b11(grid), b12(grid), b20(grid), b21(grid), b22(grid);
|
LatticeComplex b10(grid), b11(grid), b12(grid), b20(grid), b21(grid), b22(grid);
|
||||||
LatticeReal unitReal(grid);
|
LatticeReal LatticeUnitReal(grid);
|
||||||
|
|
||||||
unitReal = 1.0;
|
LatticeUnitReal = 1.0;
|
||||||
|
|
||||||
// Exponential
|
// Exponential
|
||||||
iQ2 = iQ * iQ;
|
iQ2 = iQ * iQ;
|
||||||
@ -128,11 +129,11 @@ namespace Grid {
|
|||||||
+ emiu * (toComplex(16.0*u*cosw + 2.0*u*(3.0*u2+w2)*xi0) +
|
+ emiu * (toComplex(16.0*u*cosw + 2.0*u*(3.0*u2+w2)*xi0) +
|
||||||
timesI(toComplex(-8.0*u2*cosw + 2.0*(9.0*u2+w2)*xi0)));
|
timesI(toComplex(-8.0*u2*cosw + 2.0*(9.0*u2+w2)*xi0)));
|
||||||
|
|
||||||
r11 = (toComplex(2.0*unitReal) + timesI(toComplex(4.0*u)))* e2iu
|
r11 = (toComplex(2.0*LatticeUnitReal) + timesI(toComplex(4.0*u)))* e2iu
|
||||||
+ emiu * (toComplex(-2.0*cosw + (3.0*u2-w2)*xi0) +
|
+ emiu * (toComplex(-2.0*cosw + (3.0*u2-w2)*xi0) +
|
||||||
timesI(toComplex(2.0*u*cosw + 6.0*u*xi0)));
|
timesI(toComplex(2.0*u*cosw + 6.0*u*xi0)));
|
||||||
|
|
||||||
r21 = timesI(toComplex(2.0*unitReal)) * e2iu
|
r21 = 2.0*timesI(e2iu)
|
||||||
+ emiu * (toComplex(-3.0*u*xi0) + timesI(toComplex(cosw - 3.0*xi0)));
|
+ emiu * (toComplex(-3.0*u*xi0) + timesI(toComplex(cosw - 3.0*xi0)));
|
||||||
|
|
||||||
|
|
||||||
@ -177,9 +178,9 @@ namespace Grid {
|
|||||||
iLambda = Ta(iGamma);
|
iLambda = Ta(iGamma);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
//====================================================================
|
//====================================================================
|
||||||
public:
|
public:
|
||||||
GaugeField* ThinLinks; /*!< @brief Pointer to the thin
|
GaugeField* ThinLinks; /*!< @brief Pointer to the thin
|
||||||
links configuration */
|
links configuration */
|
||||||
|
|
||||||
@ -226,15 +227,15 @@ namespace Grid {
|
|||||||
pokeLorentz(SigmaTilde, tmp_mu, mu);
|
pokeLorentz(SigmaTilde, tmp_mu, mu);
|
||||||
}
|
}
|
||||||
}// if smearingLevels = 0 do nothing
|
}// if smearingLevels = 0 do nothing
|
||||||
}
|
}
|
||||||
//====================================================================
|
//====================================================================
|
||||||
|
|
||||||
|
|
||||||
GaugeField& get_SmearedU(){
|
GaugeField& get_SmearedU(){
|
||||||
return SmearedSet[smearingLevels-1];
|
return SmearedSet[smearingLevels-1];
|
||||||
}
|
}
|
||||||
|
|
||||||
GaugeField& get_U(bool smeared=false) {
|
GaugeField& get_U(bool smeared=false) {
|
||||||
// get the config, thin links by default
|
// get the config, thin links by default
|
||||||
if (smeared){
|
if (smeared){
|
||||||
if (smearingLevels){
|
if (smearingLevels){
|
||||||
@ -255,10 +256,10 @@ namespace Grid {
|
|||||||
return *ThinLinks;}
|
return *ThinLinks;}
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
#ifndef STOUT_SMEAR_
|
#ifndef STOUT_SMEAR_
|
||||||
#define STOUT_SMEAR_
|
#define STOUT_SMEAR_
|
||||||
|
|
||||||
namespace Grid {
|
namespace Grid {
|
||||||
namespace QCD {
|
namespace QCD {
|
||||||
|
|
||||||
/*! @brief Stout smearing of link variable. */
|
/*! @brief Stout smearing of link variable. */
|
||||||
@ -48,20 +48,20 @@ namespace Grid {
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::cout<< GridLogDebug << "Stout smearing completed\n";
|
std::cout<< GridLogDebug << "Stout smearing completed\n";
|
||||||
}
|
}
|
||||||
void derivative(GaugeField& SigmaTerm,
|
void derivative(GaugeField& SigmaTerm,
|
||||||
const GaugeField& iLambda,
|
const GaugeField& iLambda,
|
||||||
const GaugeField& Gauge) const{
|
const GaugeField& Gauge) const{
|
||||||
SmearBase->derivative(SigmaTerm, iLambda, Gauge);
|
SmearBase->derivative(SigmaTerm, iLambda, Gauge);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void BaseSmear(GaugeField& C,
|
void BaseSmear(GaugeField& C,
|
||||||
const GaugeField& U) const{
|
const GaugeField& U) const{
|
||||||
SmearBase->smear(C, U);
|
SmearBase->smear(C, U);
|
||||||
}
|
}
|
||||||
|
|
||||||
void exponentiate_iQ(GaugeLinkField& e_iQ,
|
void exponentiate_iQ(GaugeLinkField& e_iQ,
|
||||||
const GaugeLinkField& iQ) const{
|
const GaugeLinkField& iQ) const{
|
||||||
// Put this outside
|
// Put this outside
|
||||||
// only valid for SU(3) matrices
|
// only valid for SU(3) matrices
|
||||||
@ -87,10 +87,10 @@ namespace Grid {
|
|||||||
set_uw(u, w, iQ2, iQ3);
|
set_uw(u, w, iQ2, iQ3);
|
||||||
set_fj(f0, f1, f2, u, w);
|
set_fj(f0, f1, f2, u, w);
|
||||||
e_iQ = f0*unity + timesMinusI(f1) * iQ - f2 * iQ2;
|
e_iQ = f0*unity + timesMinusI(f1) * iQ - f2 * iQ2;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
void set_uw(LatticeReal& u, LatticeReal& w,
|
void set_uw(LatticeReal& u, LatticeReal& w,
|
||||||
GaugeLinkField& iQ2, GaugeLinkField& iQ3) const{
|
GaugeLinkField& iQ2, GaugeLinkField& iQ3) const{
|
||||||
Real one_over_three = 1.0/3.0;
|
Real one_over_three = 1.0/3.0;
|
||||||
Real one_over_two = 1.0/2.0;
|
Real one_over_two = 1.0/2.0;
|
||||||
@ -99,7 +99,8 @@ namespace Grid {
|
|||||||
LatticeReal c0(grid), c1(grid), tmp(grid), c0max(grid), theta(grid);
|
LatticeReal c0(grid), c1(grid), tmp(grid), c0max(grid), theta(grid);
|
||||||
|
|
||||||
// sign in c0 from the conventions on the Ta
|
// sign in c0 from the conventions on the Ta
|
||||||
c0 = - toReal(imag(trace(iQ3))) * one_over_three;
|
// c0 = - toReal(imag(trace(iQ3))) * one_over_three;
|
||||||
|
c0 = - toReal(real(timesMinusI(trace(iQ3)))) * one_over_three; //temporary, FIX the bug in imag
|
||||||
c1 = - toReal(real(trace(iQ2))) * one_over_two;
|
c1 = - toReal(real(trace(iQ2))) * one_over_two;
|
||||||
tmp = c1 * one_over_three;
|
tmp = c1 * one_over_three;
|
||||||
c0max = 2.0 * pow(tmp, 1.5);
|
c0max = 2.0 * pow(tmp, 1.5);
|
||||||
@ -107,9 +108,10 @@ namespace Grid {
|
|||||||
theta = acos(c0/c0max);
|
theta = acos(c0/c0max);
|
||||||
u = sqrt(tmp) * cos( theta * one_over_three);
|
u = sqrt(tmp) * cos( theta * one_over_three);
|
||||||
w = sqrt(c1) * sin( theta * one_over_three);
|
w = sqrt(c1) * sin( theta * one_over_three);
|
||||||
}
|
|
||||||
|
|
||||||
void set_fj(LatticeComplex& f0, LatticeComplex& f1, LatticeComplex& f2,
|
}
|
||||||
|
|
||||||
|
void set_fj(LatticeComplex& f0, LatticeComplex& f1, LatticeComplex& f2,
|
||||||
const LatticeReal& u, const LatticeReal& w) const{
|
const LatticeReal& u, const LatticeReal& w) const{
|
||||||
|
|
||||||
GridBase *grid = u._grid;
|
GridBase *grid = u._grid;
|
||||||
@ -124,8 +126,8 @@ namespace Grid {
|
|||||||
cosw = cos(w);
|
cosw = cos(w);
|
||||||
|
|
||||||
ixi0 = timesI(toComplex(xi0));
|
ixi0 = timesI(toComplex(xi0));
|
||||||
emiu = toComplex(cos(u)) - timesI(toComplex(u));
|
emiu = toComplex(cos(u)) - timesI(toComplex(sin(u)));
|
||||||
e2iu = toComplex(cos(2.0*u)) + timesI(toComplex(2.0*u));
|
e2iu = toComplex(cos(2.0*u)) + timesI(toComplex(sin(2.0*u)));
|
||||||
|
|
||||||
h0 = e2iu * toComplex(u2 - w2) + emiu *( toComplex(8.0*u2*cosw) +
|
h0 = e2iu * toComplex(u2 - w2) + emiu *( toComplex(8.0*u2*cosw) +
|
||||||
toComplex(2.0*u*(3.0*u2 + w2))*ixi0);
|
toComplex(2.0*u*(3.0*u2 + w2))*ixi0);
|
||||||
@ -135,30 +137,31 @@ namespace Grid {
|
|||||||
|
|
||||||
h2 = e2iu - emiu * (toComplex(cosw) + toComplex(3.0*u)*ixi0);
|
h2 = e2iu - emiu * (toComplex(cosw) + toComplex(3.0*u)*ixi0);
|
||||||
|
|
||||||
|
|
||||||
tmp = 9.0*u2 - w2;
|
tmp = 9.0*u2 - w2;
|
||||||
fden = toComplex(pow(tmp, -1.0));
|
fden = toComplex(pow(tmp, -1.0));
|
||||||
f0 = h0 * fden;
|
f0 = h0 * fden;
|
||||||
f1 = h1 * fden;
|
f1 = h1 * fden;
|
||||||
f2 = h2 * fden;
|
f2 = h2 * fden;
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
LatticeReal func_xi0(const LatticeReal& w) const{
|
}
|
||||||
|
|
||||||
|
|
||||||
|
LatticeReal func_xi0(const LatticeReal& w) const{
|
||||||
// Define a function to do the check
|
// Define a function to do the check
|
||||||
//if( w < 1e-4 ) std::cout << GridLogWarning<< "[Smear_stout] w too small: "<< w <<"\n";
|
//if( w < 1e-4 ) std::cout << GridLogWarning<< "[Smear_stout] w too small: "<< w <<"\n";
|
||||||
return sin(w)/w;
|
return sin(w)/w;
|
||||||
}
|
}
|
||||||
|
|
||||||
LatticeReal func_xi1(const LatticeReal& w) const{
|
LatticeReal func_xi1(const LatticeReal& w) const{
|
||||||
// Define a function to do the check
|
// Define a function to do the check
|
||||||
//if( w < 1e-4 ) std::cout << GridLogWarning << "[Smear_stout] w too small: "<< w <<"\n";
|
//if( w < 1e-4 ) std::cout << GridLogWarning << "[Smear_stout] w too small: "<< w <<"\n";
|
||||||
return cos(w)/(w*w) - sin(w)/(w*w*w);
|
return cos(w)/(w*w) - sin(w)/(w*w*w);
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user