I currently make Bartek's work in the tm_functor_merge_two-flav-mshift ready for merge into devel. The curious errors with undefined types __m128d have disappeared. Now the issue is that the Multi-CG fails, but only with antiperiodic boundary conditions.
In this issue I want to describe my progress, perhaps one of you has some hunch what this actually is.
The Multi-CG test in tests/testMInvCG.cc uses my RandomGauge class and the HybridSpinor:
RandomGauge<T, V, S, compress, QdpGauge, QdpSpinor> gauge(geom, t_bc);
HybridSpinor<T, V, S, compress, QdpSpinor> hs_source(geom);
gaussian(hs_source.qdp());
hs_source.pack();
For some reason, this works just fine for t_bc = 1. When there is t_bc = -1, the hs_source spinor only contains inf in both the QDP++ data structure and the QPhiX data structure. The gaussian function acts on the QDP++ spinor, so I should not have broken anything there.
I put in some output and assertions that just check this:
masterPrintf("hs_source.qdp()[site = ...][color = 0][spin = 0][reim = 0][soa = 0] = %g "
"%g %g %g\n",
hs_source.qdp().elem(QDP::rb[0].start() + 0).elem(0).elem(0).real(),
hs_source.qdp().elem(QDP::rb[0].start() + 1).elem(0).elem(0).real(),
hs_source.qdp().elem(QDP::rb[0].start() + 2).elem(0).elem(0).real(),
hs_source.qdp().elem(QDP::rb[0].start() + 3).elem(0).elem(0).real());
masterPrintf("hs_source[0][site = ...][color = 0][spin = 0][reim = 0][soa = 0] = "
"%g %g %g %g\n",
hs_source[0][0][0][0][0][0],
hs_source[0][1][0][0][0][0],
hs_source[0][2][0][0][0][0],
hs_source[0][3][0][0][0][0]);
assert(std::isfinite(
hs_source.qdp().elem(QDP::rb[0].start() + 0).elem(0).elem(0).real()) &&
"Random source (QDP structure) is not finite.");
assert(std::isfinite(hs_source[0][0][0][0][0][0]) &&
"Random source (QPhiX structure) is not finite.");
For the periodic boundary conditions I get sensible values:
hs_source.qdp()[site = ...][color = 0][spin = 0][reim = 0][soa = 0] = 0.375244 -0.573609 -1.44159 0.799821
hs_source[0][site = ...][color = 0][spin = 0][reim = 0][soa = 0] = 0.375244 -0.179034 1.50215 1.57254
For the antiperiodic boundary conditions I just get junk:
hs_source.qdp()[site = ...][color = 0][spin = 0][reim = 0][soa = 0] = inf inf inf inf
hs_source[0][site = ...][color = 0][spin = 0][reim = 0][soa = 0] = inf inf inf inf
To me it looks like the random number generator would only produce junk. However, since it just works fine in the periodic case, I am rather confused by this. I will have to further investigate.
I currently make Bartek's work in the
tm_functor_merge_two-flav-mshiftready for merge intodevel. The curious errors with undefined types__m128dhave disappeared. Now the issue is that the Multi-CG fails, but only with antiperiodic boundary conditions.In this issue I want to describe my progress, perhaps one of you has some hunch what this actually is.
The Multi-CG test in
tests/testMInvCG.ccuses myRandomGaugeclass and theHybridSpinor:For some reason, this works just fine for
t_bc = 1. When there ist_bc = -1, thehs_sourcespinor only containsinfin both the QDP++ data structure and the QPhiX data structure. Thegaussianfunction acts on the QDP++ spinor, so I should not have broken anything there.I put in some output and assertions that just check this:
For the periodic boundary conditions I get sensible values:
For the antiperiodic boundary conditions I just get junk:
To me it looks like the random number generator would only produce junk. However, since it just works fine in the periodic case, I am rather confused by this. I will have to further investigate.