// coupling.c draw 512 layout, check for legal coupling #include #include static int legalc(int s, int legal[]); static int checkik(int i, int k); int main() { int i, j, k, n; int s = 0; int legal[6] = {0, 0, 0, 0, 0, 0}; int err; printf("coupling.c test program, running\n"); printf("512 layout, numbers are i and j values of Jij\n"); for(k=1; k<=8; k++) { for(j=1; j<=4; j++) { for(i=1; i<=7; i++) { printf("|%3d %3d|",s , s+4); s += 8; } printf("|%3d %3d|\n",s , s+4); s += 9; s -= 64; } printf(" \n"); s -= 4; s += 64; } printf(" \n"); printf("final s=%d\n", s); // legal couplings printf("inside, general\n"); s = 72; n = legalc(s, legal); printf("s=%3d, n=%1d, legal to %3d, %3d, %3d, %3d, %3d, %3d\n", s, n, legal[0], legal[1], legal[2], legal[3], legal[4], legal[5]); s = 73; n = legalc(s, legal); printf("s=%3d, n=%1d, legal to %3d, %3d, %3d, %3d, %3d, %3d\n", s, n, legal[0], legal[1], legal[2], legal[3], legal[4], legal[5]); s = 74; n = legalc(s, legal); printf("s=%3d, n=%1d, legal to %3d, %3d, %3d, %3d, %3d, %3d\n", s, n, legal[0], legal[1], legal[2], legal[3], legal[4], legal[5]); s = 75; n = legalc(s, legal); printf("s=%3d, n=%1d, legal to %3d, %3d, %3d, %3d, %3d, %3d\n", s, n, legal[0], legal[1], legal[2], legal[3], legal[4], legal[5]); s = 76; n = legalc(s, legal); printf("s=%3d, n=%1d, legal to %3d, %3d, %3d, %3d, %3d, %3d\n", s, n, legal[0], legal[1], legal[2], legal[3], legal[4], legal[5]); s = 77; n = legalc(s, legal); printf("s=%3d, n=%1d, legal to %3d, %3d, %3d, %3d, %3d, %3d\n", s, n, legal[0], legal[1], legal[2], legal[3], legal[4], legal[5]); s = 78; n = legalc(s, legal); printf("s=%3d, n=%1d, legal to %3d, %3d, %3d, %3d, %3d, %3d\n", s, n, legal[0], legal[1], legal[2], legal[3], legal[4], legal[5]); s = 79; n = legalc(s, legal); printf("s=%3d, n=%1d, legal to %3d, %3d, %3d, %3d, %3d, %3d\n", s, n, legal[0], legal[1], legal[2], legal[3], legal[4], legal[5]); printf(" \n"); printf("top row some not available\n"); s = 0; n = legalc(s, legal); printf("s=%3d, n=%1d, legal to %3d, %3d, %3d, %3d, %3d, %3d\n", s, n, legal[0], legal[1], legal[2], legal[3], legal[4], legal[5]); s = 5; n = legalc(s, legal); printf("s=%3d, n=%1d, legal to %3d, %3d, %3d, %3d, %3d, %3d\n", s, n, legal[0], legal[1], legal[2], legal[3], legal[4], legal[5]); s = 9; n = legalc(s, legal); printf("s=%3d, n=%1d, legal to %3d, %3d, %3d, %3d, %3d, %3d\n", s, n, legal[0], legal[1], legal[2], legal[3], legal[4], legal[5]); s = 17; n = legalc(s, legal); printf("s=%3d, n=%1d, legal to %3d, %3d, %3d, %3d, %3d, %3d\n", s, n, legal[0], legal[1], legal[2], legal[3], legal[4], legal[5]); s = 25; n = legalc(s, legal); printf("s=%3d, n=%1d, legal to %3d, %3d, %3d, %3d, %3d, %3d\n", s, n, legal[0], legal[1], legal[2], legal[3], legal[4], legal[5]); s = 33; n = legalc(s, legal); printf("s=%3d, n=%1d, legal to %3d, %3d, %3d, %3d, %3d, %3d\n", s, n, legal[0], legal[1], legal[2], legal[3], legal[4], legal[5]); s = 41; n = legalc(s, legal); printf("s=%3d, n=%1d, legal to %3d, %3d, %3d, %3d, %3d, %3d\n", s, n, legal[0], legal[1], legal[2], legal[3], legal[4], legal[5]); s = 49; n = legalc(s, legal); printf("s=%3d, n=%1d, legal to %3d, %3d, %3d, %3d, %3d, %3d\n", s, n, legal[0], legal[1], legal[2], legal[3], legal[4], legal[5]); s = 57; n = legalc(s, legal); printf("s=%3d, n=%1d, legal to %3d, %3d, %3d, %3d, %3d, %3d\n", s, n, legal[0], legal[1], legal[2], legal[3], legal[4], legal[5]); s = 61; n = legalc(s, legal); printf("s=%3d, n=%1d, legal to %3d, %3d, %3d, %3d, %3d, %3d\n", s, n, legal[0], legal[1], legal[2], legal[3], legal[4], legal[5]); printf(" \n"); printf("bottom row some not available\n"); s = 449; n = legalc(s, legal); printf("s=%3d, n=%1d, legal to %3d, %3d, %3d, %3d, %3d, %3d\n", s, n, legal[0], legal[1], legal[2], legal[3], legal[4], legal[5]); s = 453; n = legalc(s, legal); printf("s=%3d, n=%1d, legal to %3d, %3d, %3d, %3d, %3d, %3d\n", s, n, legal[0], legal[1], legal[2], legal[3], legal[4], legal[5]); s = 457; n = legalc(s, legal); printf("s=%3d, n=%1d, legal to %3d, %3d, %3d, %3d, %3d, %3d\n", s, n, legal[0], legal[1], legal[2], legal[3], legal[4], legal[5]); s = 465; n = legalc(s, legal); printf("s=%3d, n=%1d, legal to %3d, %3d, %3d, %3d, %3d, %3d\n", s, n, legal[0], legal[1], legal[2], legal[3], legal[4], legal[5]); s = 473; n = legalc(s, legal); printf("s=%3d, n=%1d, legal to %3d, %3d, %3d, %3d, %3d, %3d\n", s, n, legal[0], legal[1], legal[2], legal[3], legal[4], legal[5]); s = 481; n = legalc(s, legal); printf("s=%3d, n=%1d, legal to %3d, %3d, %3d, %3d, %3d, %3d\n", s, n, legal[0], legal[1], legal[2], legal[3], legal[4], legal[5]); s = 489; n = legalc(s, legal); printf("s=%3d, n=%1d, legal to %3d, %3d, %3d, %3d, %3d, %3d\n", s, n, legal[0], legal[1], legal[2], legal[3], legal[4], legal[5]); s = 497; n = legalc(s, legal); printf("s=%3d, n=%1d, legal to %3d, %3d, %3d, %3d, %3d, %3d\n", s, n, legal[0], legal[1], legal[2], legal[3], legal[4], legal[5]); s = 505; n = legalc(s, legal); printf("s=%3d, n=%1d, legal to %3d, %3d, %3d, %3d, %3d, %3d\n", s, n, legal[0], legal[1], legal[2], legal[3], legal[4], legal[5]); s = 509; n = legalc(s, legal); printf("s=%3d, n=%1d, legal to %3d, %3d, %3d, %3d, %3d, %3d\n", s, n, legal[0], legal[1], legal[2], legal[3], legal[4], legal[5]); printf(" \n"); // user function checkik(i,k) err = checkik(1,2); if(err==0) printf("J12 coupling is legal\n"); if(err==1) printf("J12 coupling illegal\n"); err = checkik(507,511); if(err==0) printf("J507,511 coupling is legal\n"); if(err==1) printf("J507,511 coupling illegal\n"); printf("coupling.c finished\n"); return 0; } // end main static int legalc(int s, int legal[]) { int localrow; int localcol; int s4, s8, s16, s64; int base; int n = 6; // local s4 = s%4; s8 = s%8; base = s - s8; s16 = s%16; s64 = s%64; // printf("s=%3d, s4=%3d, s8=%3d, s16=%3d, s64=%3d\n", s, s4, s8, s16, s64); localrow = s4; localcol = 1; if(s8>=4) localcol = 2; if(localcol==1) { legal[0] = base+4; legal[1] = base+5; legal[2] = base+6; legal[3] = base+7; legal[4] = base-64+s4; if(legal[4]<0) {legal[4] = legal[3]; n--;} legal[5] = base+64+s4; if(legal[5]>511) {legal[5] = legal[3]; n--;} } else { legal[0] = base+0; legal[1] = base+1; legal[2] = base+2; legal[3] = base+3; legal[4] = base-8+s8; if(s64<=7) {legal[4] = legal[3]; n--;} legal[5] = base+8+s8; if(s64>=56) {legal[5] = legal[3]; n--;} } return n; } // end legalc static int checkik(int i, int k) { int legal[6]; int n; int j; n = legalc(i, legal); for(j=0; j<6; j++) { if(k==legal[j]) return 0; } printf("coupling %d %d not valid\n", i, k); return 1; } // end checkik // end coupling.c