Skip to content

Multi-CG fails with antiperiodic temporal boundary conditions #111

Description

@martin-ueding

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.

No activity

Activity on this issue will appear here.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Fields

Priority

None yet

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions