In bzr trunk, the function triangle_selection_fails in specfunc/coupling.c has grown a number of redundant tests since v1.15. It is enough to check the triangle condition for one spin vs the other two. (See attached test program.) Perhaps put a comment to keep the function lean?

Cheers,
Håkan Johansson
#include <stdio.h>
#include <stdlib.h>

static
int
triangle_selection_fails_A(int two_ja, int two_jb, int two_jc)
{
  return ((two_jb < abs(two_ja - two_jc)) || (two_jb > two_ja + two_jc));
}

static
int
triangle_selection_fails_B(int two_ja, int two_jb, int two_jc)
{
  return ((two_jb < abs(two_ja - two_jc)) || (two_jb > two_ja + two_jc))
    || ((two_jc < abs(two_jb - two_ja)) || (two_jc > two_jb + two_ja))
    || ((two_ja < abs(two_jc - two_jb)) || (two_ja > two_jc + two_jb));
}

int main()
{
  int two_ja, two_jb, two_jc;

  for (two_ja = 0; two_ja < 10; two_ja++)
    for (two_jb = 0; two_jb < 10; two_jb++)
      for (two_jc = 0; two_jc < 10; two_jc++)
	{
	  int A = triangle_selection_fails_A(two_ja, two_jb, two_jc);
	  int B = triangle_selection_fails_B(two_ja, two_jb, two_jc);

	  if (A != B)
	    {
	      fprintf (stderr, "A != B: %d %d %d\n", two_ja, two_jb, two_jc);
	      exit(1);
	    }

	  printf ("%d %d %d => %d %d\n", two_ja, two_jb, two_jc, A, B);
	}
  return 0;
}

Reply via email to