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;
}