From e70915de9d0e1184e916b4ba30d3a55ea0b22422 Mon Sep 17 00:00:00 2001 From: Zeno Rogue Date: Sat, 21 Mar 2020 10:14:54 +0100 Subject: [PATCH] fixed distance computation in 3D fieldquotient --- cell.cpp | 6 ++++-- fieldpattern.cpp | 9 +++++++++ pattern2.cpp | 2 +- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/cell.cpp b/cell.cpp index 64b249a3..388da364 100644 --- a/cell.cpp +++ b/cell.cpp @@ -1064,8 +1064,10 @@ EX int celldistance(cell *c1, cell *c2) { if(hybri) return hybrid::celldistance(c1, c2); #if CAP_FIELD - if(geometry == gFieldQuotient && !GOLDBERG) - return currfp.getdist(fieldpattern::fieldval(c1), fieldpattern::fieldval(c2)); + if(geometry == gFieldQuotient) { + int d = fieldpattern::field_celldistance(c1, c2); + if(d != DISTANCE_UNKNOWN) return d; + } #endif if(bounded) return bounded_celldistance(c1, c2); diff --git a/fieldpattern.cpp b/fieldpattern.cpp index 9d13446d..8cc90e0f 100644 --- a/fieldpattern.cpp +++ b/fieldpattern.cpp @@ -1313,6 +1313,15 @@ int hk = EX purehookset on_geometry_change; +EX int field_celldistance(cell *c1, cell *c2) { + if(geometry != gFieldQuotient) return DISTANCE_UNKNOWN; + if(GOLDBERG) return DISTANCE_UNKNOWN; + auto v1 =fieldpattern::fieldval(c1); + auto v2 =fieldpattern::fieldval(c2); + int d = currfp.getdist(v1, v2); + return d; + } + EX } #define currfp fieldpattern::getcurrfp() diff --git a/pattern2.cpp b/pattern2.cpp index fdcc6855..37919c38 100644 --- a/pattern2.cpp +++ b/pattern2.cpp @@ -366,7 +366,7 @@ EX int zebra3(cell *c) { EX namespace fieldpattern { EX pair fieldval(cell *c) { - if(WDIM == 3) return make_pair(int(c->master->fieldval) * currfp.local_group, false); + if(WDIM == 3) return make_pair(currfp.inverses[int(c->master->fieldval) * currfp.local_group], false); else if(ctof(c)) return make_pair(int(c->master->fieldval), false); else return make_pair(btspin(c->master->fieldval, c->c.spin(0)), true); }