/* See {Refine.h} */ #include /* Last edited on 2007-02-03 23:02:46 by stolfi */ #define _GNU_SOURCE #include #include #include #include Corner MakeTetra(uint order, bool_t net /* DF FALSE */) { Corner c; CASE order OF break; case 1: return MakeTetra1(net); break; case 2: return MakeTetra2(net); break; case 3: return MakeTetra3(net); break; case 4: return MakeTetra4(net); break; case 5: return MakeTetra5(net); } else { return c; } } /* END MakeTetra */ Trip_vec_t *MakeTriang(uint order) == t : REF ARRAY OF Trip; { CASE order OF break; case 1: return MakeTriang1(); break; case 2: return MakeTriang2(); break; case 3: return MakeTriang3(); break; case 4: return MakeTriang4(); break; case 5: return MakeTriang5(); } else { return t; } } /* END MakeTriang */ Pack MakeLevTe(uint order) Pack *p; { CASE order OF break; case 1: return MakeLevTe1(); break; case 2: return MakeLevTe2(); break; case 3: return MakeLevTe3(); break; case 4: return MakeLevTe4(); break; case 5: return MakeLevTe5(); } else { return p; } } /* END MakeLevTe */ Free MakeRowTe(uint order) Free *f; { CASE order OF break; case 1: return MakeRowTe1(); break; case 2: return MakeRowTe2(); break; case 3: return MakeRowTe3(); break; case 4: return MakeRowTe4(); break; case 5: return MakeRowTe5(); } else { return f; } } /* END MakeRowTe */ Trip_vec_t *MakeRowTriang(uint order) == t : REF ARRAY OF Trip; { CASE order OF break; case 1: return MakeRowTriang1(); break; case 2: return MakeRowTriang2(); break; case 3: return MakeRowTriang3(); break; case 4: return MakeRowTriang4(); break; case 5: return MakeRowTriang5(); } else { return t; } } /* END MakeRowTriang */ Place_t MakeGluea(uint order) { CASE order OF break; case 1: return GlueRefineTetra(0,1,1); break; case 2: return GlueRefineTetra(0,1,2); break; case 3: return GlueRefineTetra(0,1,3); break; case 4: return GlueRefineTetra(0,1,4); break; case 5: return GlueRefineTetra(0,1,5); } else { return Triangulation.MakeWedge(); } } /* END MakeGluea */ Place_t MakeGlueb(uint order) { CASE order OF break; case 1: return GlueRefineTetra(1,0,1); break; case 2: return GlueRefineTetra(1,0,2); break; case 3: return GlueRefineTetra(1,0,3); break; case 4: return GlueRefineTetra(1,0,4); break; case 5: return GlueRefineTetra(1,0,5); } else { return Triangulation.MakeWedge(); } } /* END MakeGlueb */ Place_t MakeGluec(uint order) { CASE order OF break; case 1: return GlueRefineTetra(3,2,1); break; case 2: return GlueRefineTetra(3,2,2); break; case 3: return GlueRefineTetra(3,2,3); break; case 4: return GlueRefineTetra(3,2,4); break; case 5: return GlueRefineTetra(3,2,5); } else { return Triangulation.MakeWedge(); } } /* END MakeGluec */ Place_t MakeGlued(uint order) { CASE order OF break; case 1: return GlueRefineTetra(2,3,1); break; case 2: return GlueRefineTetra(2,3,2); break; case 3: return GlueRefineTetra(2,3,3); break; case 4: return GlueRefineTetra(2,3,4); break; case 5: return GlueRefineTetra(2,3,5); } else { return Triangulation.MakeWedge(); } } /* END MakeGlued */ Corner MakeTetra1(bool_t net = FALSE) Corner *c; { c.right = NEW(REF Place_vec_t,1); c.left = NEW(REF Place_vec_t,1); c.front = NEW(REF Place_vec_t,1); c.back = NEW(REF Place_vec_t,1); ??? a = MakeLevTe1(); { c.right[0] = a.corner.right[0]; c.left [0] = a.corner.left [0]; c.front[0] = a.corner.front[0]; c.back [0] = a.corner.back [0]; /* new extensions */ SetLackNodes(1,c); if (net){ SetGrade(1,c); } return c; } } /* END MakeTetra1 */ Corner MakeTetra2(bool_t net = FALSE) Corner *c; { c.right = NEW(REF Place_vec_t,4); c.left = NEW(REF Place_vec_t,4); c.front = NEW(REF Place_vec_t,4); c.back = NEW(REF Place_vec_t,4); ??? a = MakeTetra1(); ??? b = MakeLevTe2(); { Glue(Spin(b.side.upper[0]), a.back[0],1); HideWall (b.side.upper[0]); for (j = 0; j < 4; j++) { c.back[j] = b.corner.back[j]; } c.right[0] = a.right[0]; c.left [0] = a.left [0]; c.front[0] = a.front[0]; for (i = 1; i < 4; i++) { c.right[i] = b.corner.right[i-1]; c.left [i] = b.corner.left [i-1]; c.front[i] = b.corner.front[i-1]; } /* new extensions */ SetLackNodes(2,c); if (net){ SetGrade(2,c); } return c; } } /* END MakeTetra2 */ Corner MakeTetra3(bool_t net = FALSE) Corner *d; { d.right = NEW(REF Place_vec_t,9); d.left = NEW(REF Place_vec_t,9); d.front = NEW(REF Place_vec_t,9); d.back = NEW(REF Place_vec_t,9); ??? a = MakeTetra2(); ??? c = MakeLevTe3(); { /* Tetra-2 with Level-3: a.back[0]==T with c.upper[0]==O a.back[1]==T with c.upper[1]==O a.back[2]==O with c.upper[2]==T a.back[3]==T with c.upper[3]==O */ assert(((a.back^).nel) == ((c.side.upper^).nel)); EVAL Glue(Spin (a.back[0]), c.side.upper[0], 1, TRUE); HideWall (a.back[0]); EVAL Glue(Spin (a.back[1]), c.side.upper[1], 1, TRUE); HideWall (a.back[1]); EVAL Glue(Clock(a.back[2]), c.side.upper[2], 1, TRUE); HideWall (a.back[2]); Glue(Spin (a.back[3]), c.side.upper[3], 1, TRUE); HideWall (a.back[3]); for (j = 0; j <= (8); j++) { d.back[j] = c.corner.back[j]; } for (i = 0; i < 4; i++) { d.right[i] = a.right[i]; d.left [i] = a.left [i]; d.front[i] = a.front[i]; } for (i = 4; i <= (8); i++) { d.right[i] = c.corner.right[i-4]; d.left [i] = c.corner.left [i-4]; d.front[i] = c.corner.front[i-4]; } /* new extensions */ SetLackNodes(3,d); if (net){ SetGrade(3,d); } return d; } } /* END MakeTetra3 */ Corner MakeTetra4(bool_t net = FALSE) Corner *e; { e.right = NEW(REF Place_vec_t,16); e.left = NEW(REF Place_vec_t,16); e.front = NEW(REF Place_vec_t,16); e.back = NEW(REF Place_vec_t,16); ??? a = MakeTetra3(); ??? d = MakeLevTe4(); { /* gluing Tetra-3 with upper Level-4 */ assert(((a.back^).nel) == ((d.side.upper^).nel)); EVAL Glue(Spin (a.back[0]), d.side.upper[0], 1, TRUE); HideWall (a.back[0]); EVAL Glue(Spin (a.back[1]), d.side.upper[1], 1, TRUE); HideWall (a.back[1]); EVAL Glue(Clock(a.back[2]), d.side.upper[2], 1, TRUE); HideWall (a.back[2]); Glue(Spin (a.back[3]), d.side.upper[3], 1, TRUE); HideWall (a.back[3]); EVAL Glue(Spin (a.back[4]), d.side.upper[4], 1, TRUE); HideWall (a.back[4]); EVAL Glue(Clock(a.back[5]), d.side.upper[5], 1, TRUE); HideWall (a.back[5]); EVAL Glue(Spin (a.back[6]), d.side.upper[6], 1, TRUE); HideWall (a.back[6]); EVAL Glue(Clock(a.back[7]), d.side.upper[7], 1, TRUE); HideWall (a.back[7]); EVAL Glue(Spin (a.back[8]), d.side.upper[8], 1, TRUE); HideWall (a.back[8]); for (j = 0; j <= (15); j++) { e.back[j] = d.corner.back[j]; } for (i = 0; i <= (8); i++) { e.right[i] = a.right[i]; e.left [i] = a.left [i]; e.front[i] = a.front[i]; } for (i = 9; i <= (15); i++) { e.right[i] = d.corner.right[i-9]; e.left [i] = d.corner.left [i-9]; e.front[i] = d.corner.front[i-9]; } /* new extensions */ SetLackNodes(4,e); if (net){ SetGrade(4,e); } return e; } } /* END MakeTetra4 */ Corner MakeTetra5(bool_t net = FALSE) Corner *f; { f.right = NEW(REF Place_vec_t,25); f.left = NEW(REF Place_vec_t,25); f.front = NEW(REF Place_vec_t,25); f.back = NEW(REF Place_vec_t,25); ??? a = MakeTetra4(); ??? e = MakeLevTe5(); { /* gluing Tetra-4 with upper Level-5 */ assert(((a.back^).nel) == ((e.side.upper^).nel)); /* sixteen glues */ /* upper s.upper[0 ] = r2.octah[0,5]; s.upper[1 ] = r3.octah[0,5]; s.upper[2 ] = r3.tetra[3].p[2]; s.upper[3 ] = r3.octah[1,5]; s.upper[4 ] = r4.octah[0,5]; s.upper[5 ] = r4.tetra[5].p[2]; s.upper[6 ] = r4.octah[1,5]; s.upper[7 ] = r4.tetra[4].p[2]; s.upper[8 ] = r4.octah[2,5]; s.upper[9 ] = r5.octah[0,5]; s.upper[10] = r5.tetra[7].p[2]; s.upper[11] = r5.octah[1,5]; s.upper[12] = r5.tetra[5].p[2]; s.upper[13] = r5.octah[2,5]; s.upper[14] = r5.tetra[6].p[2]; s.upper[15] = r5.octah[3,5]; */ /* lower s.lower[0 ] = r1.tetra[0].p[2]; s.lower[1 ] = r2.tetra[0].p[2]; s.lower[2 ] = r2.octah[3,3]; s.lower[3 ] = r2.tetra[1].p[2]; s.lower[4 ] = r3.tetra[0].p[2]; s.lower[5 ] = r3.octah[5,3]; s.lower[6 ] = r3.tetra[1].p[2]; s.lower[7 ] = r3.octah[4,3]; s.lower[8 ] = r3.tetra[2].p[2]; s.lower[9 ] = r4.tetra[0].p[2]; s.lower[10] = r4.octah[0,3]; s.lower[11] = r4.tetra[1].p[2]; s.lower[12] = r4.octah[1,3]; s.lower[13] = r4.tetra[2].p[2]; s.lower[14] = r4.octah[2,3]; s.lower[15] = r4.tetra[3].p[2]; */ EVAL Glue(Spin(a.back[0]), e.side.upper[0], 1, TRUE); HideWall (a.back[0]); EVAL Glue(Spin(a.back[1]), e.side.upper[1], 1, TRUE); HideWall (a.back[1]); EVAL Glue(Clock(a.back[2]), e.side.upper[2], 1, TRUE); HideWall (a.back[2]); EVAL Glue(Spin(a.back[3]), e.side.upper[3], 1, TRUE); HideWall (a.back[3]); EVAL Glue(Spin(a.back[4]), e.side.upper[4], 1, TRUE); HideWall (a.back[4]); EVAL Glue(Clock(a.back[5]), e.side.upper[5], 1, TRUE); HideWall (a.back[5]); EVAL Glue(Spin(a.back[6]), e.side.upper[6], 1, TRUE); HideWall (a.back[6]); EVAL Glue(Clock(a.back[7]), e.side.upper[7], 1, TRUE); HideWall (a.back[7]); EVAL Glue(Spin(a.back[8]), e.side.upper[8], 1, TRUE); HideWall (a.back[8]); EVAL Glue(Spin(a.back[9]), e.side.upper[9], 1, TRUE); HideWall (a.back[9]); EVAL Glue(Clock(a.back[10]), e.side.upper[10], 1, TRUE); HideWall (a.back[10]); EVAL Glue(Spin(a.back[11]), e.side.upper[11], 1, TRUE); HideWall (a.back[11]); EVAL Glue(Clock(a.back[12]), e.side.upper[12], 1, TRUE); HideWall (a.back[12]); EVAL Glue(Spin(a.back[13]), e.side.upper[13], 1, TRUE); HideWall (a.back[13]); EVAL Glue(Clock(a.back[14]), e.side.upper[14], 1, TRUE); HideWall (a.back[14]); EVAL Glue(Spin(a.back[15]), e.side.upper[15], 1, TRUE); HideWall (a.back[15]); for (j = 0; j <= (24); j++) { f.back[j] = e.corner.back[j]; } for (i = 0; i <= (15); i++) { f.right[i] = a.right[i]; f.left [i] = a.left [i]; f.front[i] = a.front[i]; } for (i = 16; i <= (24); i++) { f.right[i] = e.corner.right[i-16]; f.left [i] = e.corner.left [i-16]; f.front[i] = e.corner.front[i-16]; } /* new extensions */ SetLackNodes(5,f); if (net){ SetGrade(5,f); } return f; } } /* END MakeTetra5 */ /* Procedure for builds triangles */ PROCEDURE MakeTriang1() : REF ARRAY OF Trip == r = NEW(REF ARRAY OF Trip, 1); { ??? t = MakeTriangle(); { r[0] = t; return r; } } /* END MakeTriang1 */ PROCEDURE MakeTriang2() : REF ARRAY OF Trip == r = NEW(REF ARRAY OF Trip, 4); { ??? t = MakeTriang1(); ??? p = MakeRowTriang2(); { SetNextF (t[0][0], Clock(p[1][0])); SetRingEdgeInfo(t[0][0], PEdge(t[0][0])); SetOrgCycle(t[0][0], OrgV(t[0][0])); SetOrgCycle(Clock(t[0][0]), OrgV(Clock(t[0][0]))); for (j = 0; j < 3; j++) { r[0][j] = t[0][j]; } for (k = 1; k < 4; k++) { for (i = 0; i < 3; i++) { r[k][i] = p[k-1][i]; } } } return r; } /* END MakeTriang2 */ PROCEDURE MakeTriang3() : REF ARRAY OF Trip == r = NEW(REF ARRAY OF Trip, 9); { ??? t = MakeTriang2(); ??? p = MakeRowTriang3(); { SetNextF (t[1][0], Clock(p[1][0])); SetNextF (t[3][0], Clock(p[3][0])); SetRingEdgeInfo(t[1][0], PEdge(t[1][0])); SetRingEdgeInfo(t[3][0], PEdge(t[3][0])); SetOrgCycle(t[1][0], OrgV(t[1][0])); SetOrgCycle(t[3][0], OrgV(t[3][0])); SetOrgCycle(Clock(t[3][0]), OrgV(Clock(t[3][0]))); for (l = 0; l < 4; l++) { for (j = 0; j < 3; j++) { r[l][j] = t[l][j]; } } for (k = 4; k <= (8); k++) { for (i = 0; i < 3; i++) { r[k][i] = p[k-4][i]; } } } return r; } /* END MakeTriang3 */ PROCEDURE MakeTriang4() : REF ARRAY OF Trip == r = NEW(REF ARRAY OF Trip, 16); { ??? t = MakeTriang3(); ??? p = MakeRowTriang4(); { SetNextF (t[4][0], Clock(p[1][0])); SetNextF (t[6][0], Clock(p[3][0])); SetNextF (t[8][0], Clock(p[5][0])); SetRingEdgeInfo(t[4][0], PEdge(t[4][0])); SetRingEdgeInfo(t[6][0], PEdge(t[6][0])); SetRingEdgeInfo(t[8][0], PEdge(t[8][0])); SetOrgCycle(t[4][0], OrgV(t[4][0])); SetOrgCycle(t[6][0], OrgV(t[6][0])); SetOrgCycle(t[8][0], OrgV(t[8][0])); SetOrgCycle(Clock(t[8][0]), OrgV(Clock(t[8][0]))); for (l = 0; l <= (8); l++) { for (j = 0; j < 3; j++) { r[l][j] = t[l][j]; } } for (k = 9; k <= (15); k++) { for (i = 0; i < 3; i++) { r[k][i] = p[k-9][i]; } } } return r; } /* END MakeTriang4 */ PROCEDURE MakeTriang5() : REF ARRAY OF Trip == r = NEW(REF ARRAY OF Trip, 25); { ??? t = MakeTriang4(); ??? p = MakeRowTriang5(); { SetNextF (t[9 ][0], Clock(p[1][0])); SetNextF (t[11][0], Clock(p[3][0])); SetNextF (t[13][0], Clock(p[5][0])); SetNextF (t[15][0], Clock(p[7][0])); SetRingEdgeInfo(t[9 ][0], PWedge(t[9 ][0]).edge); SetRingEdgeInfo(t[11][0], PEdge(t[11][0])); SetRingEdgeInfo(t[13][0], PEdge(t[13][0])); SetRingEdgeInfo(t[15][0], PEdge(t[15][0])); SetOrgCycle(t[9 ][0], OrgV(t[9 ][0])); SetOrgCycle(t[11][0], OrgV(t[11][0])); SetOrgCycle(t[13][0], OrgV(t[13][0])); SetOrgCycle(t[15][0], OrgV(t[15][0])); SetOrgCycle(Clock(t[15][0]), OrgV(Clock(t[15][0]))); for (l = 0; l <= (15); l++) { for (j = 0; j < 3; j++) { r[l][j] = t[l][j]; } } for (k = 16; k <= (24); k++) { for (i = 0; i < 3; i++) { r[k][i] = p[k-16][i]; } } } return r; } /* END MakeTriang5 */ Pack MakeLevTe1() VAR Side s; Corner c; { /* allocating memory */ s.lower = NEW(REF Place_vec_t,1); c.right = NEW(REF Place_vec_t,1); c.left = NEW(REF Place_vec_t,1); c.front = NEW(REF Place_vec_t,1); c.back = NEW(REF Place_vec_t,1); ??? r1 = MakeRowTe1(); { /* computing side information */ s.lower[0] = r1.tetra[0].p[2]; /* computing corner information */ c.right[0] = r1.tetra[0].p[0]; c.left [0] = r1.tetra[0].p[1]; c.front[0] = r1.tetra[0].p[3]; for (i = 0; i <= (0); i++) { c.back [i] = s.lower[i]; } return Pack{s,c}; /* return the base of one tetrahedron /\ / \ /____\ */ } } /* END MakeLevTe1 */ Pack MakeLevTe2() VAR Side s; Corner c; { /* side */ s.upper = NEW(REF Place_vec_t,1); s.lower = NEW(REF Place_vec_t,4); /* corner */ c.right = NEW(REF Place_vec_t,3); c.left = NEW(REF Place_vec_t,3); c.front = NEW(REF Place_vec_t,3); c.back = NEW(REF Place_vec_t,4); ??? r1 = MakeRowTe1(); ??? r2 = MakeRowTe2(); { Glue(Spin(r2.octah[0,7]), Clock(Spin(r1.tetra[0].p[3])),1); HideWall(r2.octah[0,7]); /* computing side information */ s.upper[0] = r2.octah[0,5]; s.lower[0] = r1.tetra[0].p[2]; s.lower[1] = r2.tetra[0].p[2]; s.lower[2] = r2.octah[0,3]; s.lower[3] = r2.tetra[1].p[2]; /* computing corner information */ c.right[0] = r1.tetra[0].p[0]; c.right[1] = r2.octah[0,6]; c.right[2] = r2.tetra[1].p[0]; c.left [0] = r1.tetra[0].p[1]; c.left [1] = r2.octah[0,4]; c.left [2] = r2.tetra[0].p[1]; c.front[0] = r2.tetra[0].p[3]; c.front[1] = r2.octah[0,1]; c.front[2] = r2.tetra[1].p[3]; for (i = 0; i < 4; i++) { c.back [i] = s.lower[i]; } return Pack{s,c}; /* return a single upper triangular wall of the level-2 that will be glue with the single lower triangular wall of the level-1. /\ /\ / \ / \ / 0 \ / 0 \ /------\ ------ / \ 2 / \ / 1 \ / 3 \ /_____\/_____\ s.lower s.upper */ } } /* END MakeLevTe2 */ Pack MakeLevTe3() VAR Side s; Corner c; { /* side */ s.upper = NEW(REF Place_vec_t,4); s.lower = NEW(REF Place_vec_t,9); /* corner */ c.right = NEW(REF Place_vec_t,5); c.left = NEW(REF Place_vec_t,5); c.front = NEW(REF Place_vec_t,5); c.back = NEW(REF Place_vec_t,9); ??? r1 = MakeRowTe1(); ??? r2 = MakeRowTe2(); ??? r3 = MakeRowTe3(); { /* free @places r3.tetra[3].p[3] ==> r2.octah[0,1] r3.octah[0,7] ==> r2.tetra[0].p[3] r3.octah[1,7] ==> r2.tetra[1].p[3] r2.octah[0,7] ==> r1.tetra[0].p[3] */ Glue(Spin (r3.tetra[3].p[3]), r2.octah[0,1], 1); HideWall (r3.tetra[3].p[3]); Glue(Clock(r3.octah[0,7]), r2.tetra[0].p[3], 1); HideWall (r3.octah[0,7]); Glue(Clock(r3.octah[1,7]), r2.tetra[1].p[3], 1); HideWall (r3.octah[1,7]); Glue(Clock(r2.octah[0,7]), r1.tetra[0].p[3], 1); HideWall (r2.octah[0,7]); /* computing side information */ /* upper */ s.upper[0] = r2.octah[0,5]; s.upper[1] = r3.octah[0,5]; s.upper[2] = r3.tetra[3].p[2]; s.upper[3] = r3.octah[1,5]; /* lower */ s.lower[0] = r1.tetra[0].p[2]; s.lower[1] = r2.tetra[0].p[2]; s.lower[2] = r2.octah[0,3]; s.lower[3] = r2.tetra[1].p[2]; s.lower[4] = r3.tetra[0].p[2]; s.lower[5] = r3.octah[0,3]; s.lower[6] = r3.tetra[1].p[2]; s.lower[7] = r3.octah[1,3]; s.lower[8] = r3.tetra[2].p[2]; /* computing corner information */ c.right[0] = r1.tetra[0].p[0]; c.right[1] = r2.octah[0,6]; c.right[2] = r2.tetra[1].p[0]; c.right[3] = r3.octah[1,6]; c.right[4] = r3.tetra[2].p[0]; c.left [0] = r1.tetra[0].p[1]; c.left [1] = r2.octah[0,4]; c.left [2] = r2.tetra[0].p[1]; c.left [3] = r3.octah[0,4]; c.left [4] = r3.tetra[0].p[1]; c.front[0] = r3.tetra[0].p[3]; c.front[1] = r3.octah[0,1]; c.front[2] = r3.tetra[1].p[3]; c.front[3] = r3.octah[1,1]; c.front[4] = r3.tetra[2].p[3]; for (i = 0; i <= (8); i++) { c.back [i] = s.lower[i]; } return Pack{s,c}; /* return an array of (four) upper triangular walls of the level three that will be glue with the (four) lower triangular walls of the level two. /\ /\ / \ / \ / 0 \ / 0 \ /------\ /------\ / \ 2 / \ / \ 2 / \ / 1 \ / 3 \ / 1 \ / 3 \ /_____\/_____\ /_____\/_____\ / 5 / \ 7 / \ / \ / \ / \ / 4 \/ 6 \/ 8 \ -------------------- s.upper s.lower */ } } /* END MakeLevTe3 */ Pack MakeLevTe4() VAR Side s; Corner c; { /* side */ s.upper = NEW(REF Place_vec_t,9); s.lower = NEW(REF Place_vec_t,16); /* corner */ c.right = NEW(REF Place_vec_t,7); c.left = NEW(REF Place_vec_t,7); c.front = NEW(REF Place_vec_t,7); c.back = NEW(REF Place_vec_t,16); ??? r1 = MakeRowTe1(); ??? r2 = MakeRowTe2(); ??? r3 = MakeRowTe3(); ??? r4 = MakeRowTe4(); { /* r1 with r2 */ Glue(Clock(r2.octah[0,7]), r1.tetra[0].p[3], 1); HideWall (r2.octah[0,7]); /* free @places r2 with r3 r3.tetra[3].p[3] ==> r2.octah[0,1] r3.octah[0,7] ==> r2.tetra[0].p[3] r3.octah[1,7] ==> r2.tetra[1].p[3] free @places r2 with r1 r2.octah[0,7] ==> r1.tetra[0].p[3] */ /* r3 with r2 */ Glue(Spin (r3.tetra[3].p[3]), r2.octah[0,1], 1); HideWall (r3.tetra[3].p[3]); Glue(Clock(r3.octah[0,7]), r2.tetra[0].p[3], 1); HideWall (r3.octah[0,7]); Glue(Clock(r3.octah[1,7]), r2.tetra[1].p[3], 1); HideWall (r3.octah[1,7]); /* r4 with r3 */ /* free @places r3 with r2 r4.octah[0,7] ==> r3.tetra[0].p[3] r4.tetra[5].p[3] ==> r3.octah[0,1] r4.octah[1,7] ==> r3.tetra[1].p[3] r4.tetra[1].p[3] ==> r3.octah[1,1] r4.octah[2,7] ==> r3.tetra[2].p[3] */ EVAL Glue(Spin (r4.tetra[5].p[3]), r3.octah[0,1], 1, TRUE); HideWall (r4.tetra[5].p[3]); EVAL Glue(Clock(r4.octah[0,7]), r3.tetra[0].p[3], 1, TRUE); HideWall (r4.octah[0,7]); EVAL Glue(Clock(r4.octah[1,7]), r3.tetra[1].p[3], 1, TRUE); HideWall (r4.octah[1,7]); EVAL Glue(Spin (r4.tetra[4].p[3]), r3.octah[1,1], 1, TRUE); HideWall (r4.tetra[4].p[3]); EVAL Glue(Clock(r4.octah[2,7]), r3.tetra[2].p[3], 1, TRUE); HideWall (r4.octah[2,7]); /* upper */ s.upper[0] = r2.octah[0,5]; s.upper[1] = r3.octah[0,5]; s.upper[2] = r3.tetra[3].p[2]; s.upper[3] = r3.octah[1,5]; s.upper[4] = r4.octah[0,5]; s.upper[5] = r4.tetra[5].p[2]; s.upper[6] = r4.octah[1,5]; s.upper[7] = r4.tetra[4].p[2]; s.upper[8] = r4.octah[2,5]; /* lower */ s.lower[0 ] = r1.tetra[0].p[2]; s.lower[1 ] = r2.tetra[0].p[2]; s.lower[2 ] = r2.octah[0,3]; s.lower[3 ] = r2.tetra[1].p[2]; s.lower[4 ] = r3.tetra[0].p[2]; s.lower[5 ] = r3.octah[0,3]; s.lower[6 ] = r3.tetra[1].p[2]; s.lower[7 ] = r3.octah[1,3]; s.lower[8 ] = r3.tetra[2].p[2]; s.lower[9 ] = r4.tetra[0].p[2]; s.lower[10] = r4.octah[0,3]; s.lower[11] = r4.tetra[1].p[2]; s.lower[12] = r4.octah[1,3]; s.lower[13] = r4.tetra[2].p[2]; s.lower[14] = r4.octah[2,3]; s.lower[15] = r4.tetra[3].p[2]; /* computing corner information */ c.right[0] = r1.tetra[0].p[0]; c.right[1] = r2.octah[0,6]; c.right[2] = r2.tetra[1].p[0]; c.right[3] = r3.octah[1,6]; c.right[4] = r3.tetra[2].p[0]; c.right[5] = r4.octah[2,6]; c.right[6] = r4.tetra[3].p[0]; c.left [0] = r1.tetra[0].p[1]; c.left [1] = r2.octah[0,4]; c.left [2] = r2.tetra[0].p[1]; c.left [3] = r3.octah[0,4]; c.left [4] = r3.tetra[0].p[1]; c.left [5] = r4.octah[0,4]; c.left [6] = r4.tetra[0].p[1]; c.front[0] = r4.tetra[0].p[3]; c.front[1] = r4.octah[0,1]; c.front[2] = r4.tetra[1].p[3]; c.front[3] = r4.octah[1,1]; c.front[4] = r4.tetra[2].p[3]; c.front[5] = r4.octah[2,1]; c.front[6] = r4.tetra[3].p[3]; for (i = 0; i <= (15); i++) { c.back [i] = s.lower[i]; } return Pack{s,c}; /* return an array of (nine) upper triangular walls of the level three that will be glue with the (nine) lower triangular walls of the level three. /\ /\ / \ / \ / 0 \ / 0 \ /------\ /------\ / \ 2 / \ / \ 2 / \ / 1 \ / 3 \ / 1 \ / 3 \ /_____\/_____\ /_____\/_____\ /\ 5 / \ 7 / \ / 5 / \ 7 / \ / \ / \ / \ / \ / \ / \ / 4 \/ 6 \/ 8 \ / 4 \/ 6 \/ 8 \ /--------------------\ --------------------- / \ 10 /\ 12 /\ 14 / \ / \ / \ / \ / \ / 9 \/ 11 \ / 13 \/ 15 \ ---------------------------- s.lower s.upper */ } } /* END MakeLevTe4 */ Pack MakeLevTe5() VAR Side s; Corner c; { /* side */ s.upper = NEW(REF Place_vec_t,16); s.lower = NEW(REF Place_vec_t,25); /* corner */ c.right = NEW(REF Place_vec_t,9); c.left = NEW(REF Place_vec_t,9); c.front = NEW(REF Place_vec_t,9); c.back = NEW(REF Place_vec_t,25); ??? r1 = MakeRowTe1(); ??? r2 = MakeRowTe2(); ??? r3 = MakeRowTe3(); ??? r4 = MakeRowTe4(); ??? r5 = MakeRowTe5(); { /* r1 with r2 */ Glue(Clock(r2.octah[0,7]), r1.tetra[0].p[3], 1); HideWall (r2.octah[0,7]); /* free @places r2 with r3 r3.tetra[3].p[3] ==> r2.octah[0,1] r3.octah[0,7] ==> r2.tetra[0].p[3] r3.octah[1,7] ==> r2.tetra[1].p[3] free @places r2 with r1 r2.octah[0,7] ==> r1.tetra[0].p[3] */ /* r3 with r2 */ Glue(Spin (r3.tetra[3].p[3]), r2.octah[0,1], 1); HideWall (r3.tetra[3].p[3]); Glue(Clock(r3.octah[0,7]), r2.tetra[0].p[3], 1); HideWall (r3.octah[0,7]); Glue(Clock(r3.octah[1,7]), r2.tetra[1].p[3], 1); HideWall (r3.octah[1,7]); /* r4 with r3 */ /* free @places r3 with r2 r4.octah[0,7] ==> r3.tetra[0].p[3] r4.tetra[5].p[3] ==> r3.octah[0,1] r4.octah[1,7] ==> r3.tetra[1].p[3] r4.tetra[1].p[3] ==> r3.octah[1,1] r4.octah[2,7] ==> r3.tetra[2].p[3] */ EVAL Glue(Spin (r4.tetra[5].p[3]), r3.octah[0,1], 1, TRUE); HideWall (r4.tetra[5].p[3]); EVAL Glue(Clock(r4.octah[0,7]), r3.tetra[0].p[3], 1, TRUE); HideWall (r4.octah[0,7]); EVAL Glue(Clock(r4.octah[1,7]), r3.tetra[1].p[3], 1, TRUE); HideWall (r4.octah[1,7]); EVAL Glue(Spin (r4.tetra[4].p[3]), r3.octah[1,1], 1, TRUE); HideWall (r4.tetra[4].p[3]); EVAL Glue(Clock(r4.octah[2,7]), r3.tetra[2].p[3], 1, TRUE); HideWall (r4.octah[2,7]); /* r4 with r5 */ EVAL Glue(Spin (r5.tetra[7].p[3]), r4.octah[0,1], 1, TRUE); HideWall (r5.tetra[7].p[3]); EVAL Glue(Spin (r5.tetra[5].p[3]), r4.octah[1,1], 1, TRUE); HideWall (r5.tetra[5].p[3]); EVAL Glue(Clock(r5.octah[0,7]), r4.tetra[0].p[3], 1, TRUE); HideWall (r5.octah[0,7]); EVAL Glue(Clock(r5.octah[1,7]), r4.tetra[1].p[3], 1, TRUE); HideWall (r5.octah[1,7]); EVAL Glue(Spin (r5.tetra[6].p[3]), r4.octah[2,1], 1, TRUE); HideWall (r5.tetra[6].p[3]); EVAL Glue(Clock(r5.octah[2,7]), r4.tetra[2].p[3], 1, TRUE); HideWall (r5.octah[2,7]); EVAL Glue(Clock(r5.octah[3,7]), r4.tetra[3].p[3], 1, TRUE); HideWall (r5.octah[3,7]); /* computing corner information */ /* upper */ s.upper[0 ] = r2.octah[0,5]; s.upper[1 ] = r3.octah[0,5]; s.upper[2 ] = r3.tetra[3].p[2]; s.upper[3 ] = r3.octah[1,5]; s.upper[4 ] = r4.octah[0,5]; s.upper[5 ] = r4.tetra[5].p[2]; s.upper[6 ] = r4.octah[1,5]; s.upper[7 ] = r4.tetra[4].p[2]; s.upper[8 ] = r4.octah[2,5]; s.upper[9 ] = r5.octah[0,5]; s.upper[10] = r5.tetra[7].p[2]; s.upper[11] = r5.octah[1,5]; s.upper[12] = r5.tetra[5].p[2]; s.upper[13] = r5.octah[2,5]; s.upper[14] = r5.tetra[6].p[2]; s.upper[15] = r5.octah[3,5]; /* lower */ s.lower[0 ] = r1.tetra[0].p[2]; s.lower[1 ] = r2.tetra[0].p[2]; s.lower[2 ] = r2.octah[0,3]; s.lower[3 ] = r2.tetra[1].p[2]; s.lower[4 ] = r3.tetra[0].p[2]; s.lower[5 ] = r3.octah[0,3]; s.lower[6 ] = r3.tetra[1].p[2]; s.lower[7 ] = r3.octah[1,3]; s.lower[8 ] = r3.tetra[2].p[2]; s.lower[9 ] = r4.tetra[0].p[2]; s.lower[10] = r4.octah[0,3]; s.lower[11] = r4.tetra[1].p[2]; s.lower[12] = r4.octah[1,3]; s.lower[13] = r4.tetra[2].p[2]; s.lower[14] = r4.octah[2,3]; s.lower[15] = r4.tetra[3].p[2]; s.lower[16] = r5.tetra[0].p[2]; s.lower[17] = r5.octah[0,3]; s.lower[18] = r5.tetra[1].p[2]; s.lower[19] = r5.octah[1,3]; s.lower[20] = r5.tetra[2].p[2]; s.lower[21] = r5.octah[2,3]; s.lower[22] = r5.tetra[3].p[2]; s.lower[23] = r5.octah[3,3]; s.lower[24] = r5.tetra[4].p[2]; /* computing corner information */ c.right[0] = r1.tetra[0].p[0]; c.right[1] = r2.octah[0,6]; c.right[2] = r2.tetra[1].p[0]; c.right[3] = r3.octah[1,6]; c.right[4] = r3.tetra[2].p[0]; c.right[5] = r4.octah[2,6]; c.right[6] = r4.tetra[3].p[0]; c.right[7] = r5.octah[3,6]; c.right[8] = r5.tetra[4].p[0]; c.left [0] = r1.tetra[0].p[1]; c.left [1] = r2.octah[0,4]; c.left [2] = r2.tetra[0].p[1]; c.left [3] = r3.octah[0,4]; c.left [4] = r3.tetra[0].p[1]; c.left [5] = r4.octah[0,4]; c.left [6] = r4.tetra[0].p[1]; c.left [7] = r5.octah[0,4]; c.left [8] = r5.tetra[0].p[1]; c.front[0] = r5.tetra[0].p[3]; c.front[1] = r5.octah[0,1]; c.front[2] = r5.tetra[1].p[3]; c.front[3] = r5.octah[1,1]; c.front[4] = r5.tetra[2].p[3]; c.front[5] = r5.octah[2,1]; c.front[6] = r5.tetra[3].p[3]; c.front[7] = r5.octah[3,1]; c.front[8] = r5.tetra[4].p[3]; for (i = 0; i <= (24); i++) { c.back [i] = s.lower[i]; } return Pack{s,c}; /* return an array of (sixteen) upper triangular walls of the level three that will be glue with the (sixteen) lower triangular walls of the level four. /\ /\ / \ / \ / 0 \ / 0 \ /------\ /------\ / \ 2 / \ / \ 2 / \ / 1 \ / 3 \ / 1 \ / 3 \ /_____\/_____\ /_____\/_____\ /\ 5 / \ 7 / \ / 5 / \ 7 / \ / \ / \ / \ / \ / \ / \ / 4 \/ 6 \/ 8 \ / 4 \/ 6 \/ 8 \ --------------------\ --------------------- / \ 10 /\ 12 /\ 14 / \ / \ / \ / \ / \ / 9 \/ 11 \ / 13 \/ 15 \ ---------------------------- s.upper s.upper */ } } /* END MakeLevTe5 */ Free MakeRowTe1() Free *f; { f.tetra = NEW(REF ARRAY OF Place_vec_t,1,4); ??? t = MakeTetraTopo(1,1); { for (i = 0; i < 4; i++) { f.tetra[0].p[i] = t[i]; } return f; /* return one triangular */; } } /* END MakeRowTe1 */ Free MakeRowTe2() Free *f; { f.tetra = NEW(REF ARRAY OF Place_vec_t,2,4); f.octah = NEW(REF ARRAY OF Place_vec_t,1,8); ??? p = GlueTetraOctah(); ??? t = MakeTetraTopo(1,1); { Glue(Clock(p.octah[0,2]), t[1], 1); HideWall(p.octah[0,2]); for (i = 0; i < 4; i++) { f.tetra[0].p[i] = p.tetra[0].p[i]; } for (i = 0; i < 4; i++) { f.tetra[1].p[i] = t[i]; } for (i = 0; i < 8; i++) { f.octah[0,i] = p.octah[0,i]; } return f; } } /* END MakeRowTe2 */ Free GlueTetraOctah() Free *f; { f.tetra = NEW(REF ARRAY OF Place_vec_t,1,4); f.octah = NEW(REF ARRAY OF Place_vec_t,1,8); ??? t = MakeTetraTopo(1,1); ??? o = MakeOctahedronTriang(TRUE); { Glue(Spin(o[0]), t[0], 1); HideWall(o[0]); for (i = 0; i < 4; i++) { f.tetra[0].p[i] = t[i]; } for (j = 0; j < 8; j++) { f.octah[0,j] = o[j]; } return f; } } /* END GlueTetraOctah */ Free MakeRowTe3() Free *f; { f.tetra = NEW(REF ARRAY OF Place_vec_t,4,4); f.octah = NEW(REF ARRAY OF Place_vec_t,2,8); ??? r2 = MakeRowTe2(); ??? r1 = GlueTetraOctah(); ??? t = MakeTetraTopo(1,1); { /* free @places: r1.octah [0,2] and t[0] r2.tetra[0].p[1] and r2.octah[0,4] */ Glue(Spin(r2.octah[0,4]) , Clock(Spin(t[0])), 1); HideWall(r2.octah[0,4]); Glue(Spin(t[1]) , r1.octah[0,6], 1); HideWall(t[1]); Glue(Clock(r1.octah[0,2]), r2.tetra[0].p[1], 1); HideWall(r1.octah[0,2]); for (i = 0; i < 4; i++) { f.tetra[0].p[i] = r1.tetra[0].p[i]; f.tetra[1].p[i] = r2.tetra[0].p[i]; f.tetra[2].p[i] = r2.tetra[1].p[i]; f.tetra[3].p[i] = t[i]; } for (i = 0; i < 8; i++) { f.octah[0,i] = r1.octah[0,i]; f.octah[1,i] = r2.octah[0,i]; } return f; } } /* END MakeRowTe3 */ Free MakeRowTe4() Free *f; { f.tetra = NEW(REF ARRAY OF Place_vec_t,6,4); f.octah = NEW(REF ARRAY OF Place_vec_t,3,8); ??? r3 = MakeRowTe3(); ??? r1 = GlueTetraOctah(); ??? t = MakeTetraTopo(1,1); { /* free @places: r1.octah[0,2] and t[0] r3.tetra[0].p[1] and r3.octah[0,4] */ Glue(Spin(r3.octah[0,4]) , Spin(Clock(t[0])), 1); HideWall (r3.octah[0,4]); Glue(Spin(t[1]) , r1.octah[0,6], 1); HideWall (t[1]); Glue(Clock(r1.octah[0,2]), r3.tetra[0].p[1], 1); HideWall (r1.octah[0,2]); for (i = 0; i < 4; i++) { f.tetra[0].p[i] = r1.tetra[0].p[i]; f.tetra[1].p[i] = r3.tetra[0].p[i]; f.tetra[2].p[i] = r3.tetra[1].p[i]; f.tetra[3].p[i] = r3.tetra[2].p[i]; f.tetra[4].p[i] = r3.tetra[3].p[i]; f.tetra[5].p[i] = t[i]; } for (i = 0; i < 8; i++) { f.octah[0,i] = r1.octah[0,i]; f.octah[1,i] = r3.octah[0,i]; f.octah[2,i] = r3.octah[1,i]; } return f; } } /* END MakeRowTe4 */ Free MakeRowTe5() Free *f; { f.tetra = NEW(REF ARRAY OF Place_vec_t,8,4); f.octah = NEW(REF ARRAY OF Place_vec_t,5,8); ??? r3 = MakeRowTe4(); ??? r1 = GlueTetraOctah(); ??? t = MakeTetraTopo(1,1); { /* free @places: r1.octah[0,2] and t[0] r3.tetra[0].p[1] and r3.octah[0,4] */ Glue(Spin(r3.octah[0,4]) , Spin(Clock(t[0])),1); HideWall (r3.octah[0,4]); Glue(Spin(t[1]) , r1.octah[0,6], 1); HideWall (t[1]); Glue(Clock(r1.octah[0,2]), r3.tetra[0].p[1], 1); HideWall (r1.octah[0,2]); for (i = 0; i < 4; i++) { f.tetra[0].p[i] = r1.tetra[0].p[i]; f.tetra[1].p[i] = r3.tetra[0].p[i]; f.tetra[2].p[i] = r3.tetra[1].p[i]; f.tetra[3].p[i] = r3.tetra[2].p[i]; f.tetra[4].p[i] = r3.tetra[3].p[i]; f.tetra[5].p[i] = r3.tetra[5].p[i]; f.tetra[6].p[i] = r3.tetra[4].p[i]; f.tetra[7].p[i] = t[i]; } for (i = 0; i < 8; i++) { f.octah[0,i] = r1.octah[0,i]; f.octah[1,i] = r3.octah[0,i]; f.octah[2,i] = r3.octah[1,i]; f.octah[3,i] = r3.octah[2,i]; } return f; } } /* END MakeRowTe5 */ PROCEDURE MakeRowTriang1() : REF ARRAY OF Trip == r = NEW(REF ARRAY OF Trip, 1); { ??? t = MakeTriangle(); { r[0] = t; return r; } } /* END MakeRowTriang1 */ PROCEDURE MakeRowTriang2() : REF ARRAY OF Trip == r = NEW(REF ARRAY OF Trip, 3); { ??? p = GlueTwoTriang(); ??? t = MakeRowTriang1(); { SetNextF (p[1][2], Clock(t[0][2])); SetRingEdgeInfo(p[1][2], PEdge(p[1][2])); SetOrg(t[0][2], OrgV(Clock(p[1][2]))); SetOrg(Clock(t[0][2]), OrgV(p[1][2])); SetOrg(Clock(t[0][1]), OrgV(t[0][2])); SetOrg( t[0][0] , OrgV(Clock(t[0][2]))); for (k = 0; k < 2; k++) { for (i = 0; i < 3; i++) { r[k][i] = p[k][i]; } } for (j = 0; j < 3; j++) { r[2][j] = t[0][j]; } } return r; } /* END MakeRowTriang2 */ PROCEDURE MakeRowTriang3() : REF ARRAY OF Trip == r = NEW(REF ARRAY OF Trip, 5); { ??? p = GlueTwoTriang(); ??? t = MakeRowTriang2(); { SetNextF (p[1][2], Clock(t[0][2])); SetRingEdgeInfo(p[1][2], PEdge(p[1][2])); SetOrg(t[0][2], OrgV(Clock(p[1][2]))); SetOrg(Clock(t[0][2]), OrgV(p[1][2])); SetOrg( t[0][0] , OrgV(Clock(t[0][2]))); SetOrgCycle(Clock(t[0][1]), OrgV(t[0][2])); for (k = 0; k < 2; k++) { for (i = 0; i < 3; i++) { r[k][i] = p[k][i]; } } for (k = 2; k < 5; k++) { for (j = 0; j < 3; j++) { r[k][j] = t[k-2][j]; } } } return r; } /* END MakeRowTriang3 */ PROCEDURE MakeRowTriang4() : REF ARRAY OF Trip == r = NEW(REF ARRAY OF Trip, 7); { ??? p = GlueTwoTriang(); ??? t = MakeRowTriang3(); { SetNextF (p[1][2], Clock(t[0][2])); SetRingEdgeInfo(p[1][2], PEdge(p[1][2])); SetOrg(t[0][2], OrgV(Clock(p[1][2]))); SetOrg(Clock(t[0][2]), OrgV(p[1][2])); SetOrg( t[0][0] , OrgV(Clock(t[0][2]))); SetOrgCycle(Clock(t[0][1]), OrgV(t[0][2])); for (k = 0; k < 2; k++) { for (i = 0; i < 3; i++) { r[k][i] = p[k][i]; } } for (k = 2; k <= (6); k++) { for (j = 0; j < 3; j++) { r[k][j] = t[k-2][j]; } } } return r; } /* END MakeRowTriang4 */ PROCEDURE MakeRowTriang5() : REF ARRAY OF Trip == r = NEW(REF ARRAY OF Trip, 9); { ??? p = GlueTwoTriang(); ??? t = MakeRowTriang4(); { SetNextF (p[1][2], Clock(t[0][2])); SetRingEdgeInfo(p[1][2], PEdge(p[1][2])); SetOrg(t[0][2], OrgV(Clock(p[1][2]))); SetOrg(Clock(t[0][2]), OrgV(p[1][2])); SetOrg( t[0][0] , OrgV(Clock(t[0][2]))); SetOrgCycle(Clock(t[0][1]), OrgV(t[0][2])); for (k = 0; k < 2; k++) { for (i = 0; i < 3; i++) { r[k][i] = p[k][i]; } } for (k = 2; k <= (8); k++) { for (j = 0; j < 3; j++) { r[k][j] = t[k-2][j]; } } } return r; } /* END MakeRowTriang5 */ PROCEDURE GlueTwoTriang() : ARRAY [0..1] OF Trip == Trip p[1+1]; { ??? t1 = MakeTriangle(); ??? t2 = MakeTriangle(); { SetNextF(t1[1], Clock(t2[1])); SetRingEdgeInfo(t1[1], PEdge(t1[1])); SetOrg(t2[1], OrgV(Clock(t1[1]))); SetOrg(Clock(t2[1]), OrgV(t1[1])); SetOrg(Clock(t2[0]), OrgV(t2[1])); SetOrg( t2[2], OrgV(Clock(t2[1]))); for (i = 0; i < 3; i++) { p[0][i] = t1[i]; p[1][i] = t2[i]; } } return p; } /* END GlueTwoTriang */ Place_t GlueRefineTetra( uint fa, fb; uint order; ) { if (order == 1){ ??? ca = MakeTetra1(); ??? cb = MakeTetra1(); { if (( fa == 0) && (fb == 1)) { /* must be glue ca.right <--> cb.left */ Glue(Spin(cb.left[0]), ca.right[0], 1); return cb.left[0]; } else if ((fa == 1) && (fb == 0)){ /* must be glue ca.left <--> cb.right */ Glue(Spin(ca.left[0]), cb.right[0], 1); return ca.left[0]; } else if ((fa == 3) && (fb == 2)){ /* must be glue ca.front <--> cb.back */ Glue(Spin(cb.back[0]), ca.front[0], 1); return cb.back[0]; } else if ((fa == 2) && (fb == 3)){ /* must be glue ca.back <--> cb.front */ Glue(Spin(cb.front[0]), ca.back[0], 1); return cb.front[0]; } } } else if (order == 2){ ??? ca = MakeTetra2(); ??? cb = MakeTetra2(); { if (( fa == 0) && (fb == 1)) { /* must be glue ca.right <--> cb.left */ Glue(Spin(cb.left[0]), ca.right[0], 1); for (i = 1; i < 4; i++) { if (i % 2!=0) { Glue(Spin (cb.left[i]), ca.right[i], 1); } else { Glue(Spin (cb.left[i]), Spin(Clock(ca.right[i])), 1); } } return cb.left[0]; } else if ((fa == 1) && (fb == 0)){ /* must be glue ca.left <--> cb.right */ Glue(Spin(ca.left[0]), cb.right[0], 1); for (i = 1; i < 4; i++) { if (i % 2!=0) { Glue(Spin (ca.left[i]), cb.right[i], 1); } else { Glue(Spin (ca.left[i]), Spin(Clock(cb.right[i])), 1); } } return ca.left[0]; } else if ((fa == 3) && (fb == 2)){ /* must be glue ca.front <--> cb.back */ Glue(Spin(cb.back[0]), ca.front[0], 1); for (i = 1; i < 4; i++) { if (i % 2!=0) { Glue(Spin (cb.back[i]), ca.front[i], 1); } else { Glue(Clock(cb.back[i]), ca.front[i], 1); } } return cb.back[0]; } else if ((fa == 2) && (fb == 3)){ /* must be glue ca.front <--> cb.back */ Glue(Spin(ca.back[0]), cb.front[0], 1); for (i = 1; i < 4; i++) { if (i % 2!=0) { Glue(Spin (ca.back[i]), cb.front[i], 1); } else { Glue(Clock(ca.back[i]), cb.front[i], 1); } } return ca.back[0]; } } } else if (order == 3){ ??? ca = MakeTetra3(); ??? cb = MakeTetra3(); { if (( fa == 0) && (fb == 1)) { /* must be glue ca.right <--> cb.left */ Glue(Spin(cb.left[0]), ca.right[0], 1); for (i = 1; i < 4; i++) { if (i % 2!=0) { Glue(Spin (cb.left[i]), ca.right[i], 1); } else { Glue(Spin (cb.left[i]), Spin(Clock(ca.right[i])), 1); } } for (i = 4; i <= (8); i++) { if (i % 2 == 0) { Glue(Spin (cb.left[i]), ca.right[i], 1); } else { Glue(Spin (cb.left[i]), Spin(Clock(ca.right[i])), 1); } } return cb.left[0]; } else if (( fa == 1) && (fb == 0)){ /* must be glue ca.lef <--> cb.right */ Glue(Spin(ca.left[0]), cb.right[0], 1); for (i = 1; i < 4; i++) { if (i % 2!=0) { Glue(Spin (ca.left[i]), cb.right[i], 1); } else { Glue(Spin (ca.left[i]), Spin(Clock(cb.right[i])), 1); } } for (i = 4; i <= (8); i++) { if (i % 2 == 0) { Glue(Spin (ca.left[i]), cb.right[i], 1); } else { Glue(Spin (ca.left[i]), Spin(Clock(cb.right[i])), 1); } } return ca.left[0]; } else if ((fa == 3) && (fb == 2)){ /* must be glue ca.front <--> cb.back */ Glue(Spin (cb.back[0]), ca.front[0], 1); for (i = 1; i < 4; i++) { if (i % 2!=0) { Glue(Spin (cb.back[i]), ca.front[i], 1); } else { Glue(Clock(cb.back[i]), ca.front[i], 1); } } for (i = 4; i <= (8); i++) { if (i % 2 == 0) { Glue(Spin (cb.back[i]), ca.front[i], 1); } else { Glue(Clock(cb.back[i]), ca.front[i], 1); } } return cb.back[0]; } else if ((fa == 2) && (fb == 3)){ /* must be glue ca.back <--> cb.front */ Glue(Spin (ca.back[0]), cb.front[0], 1); for (i = 1; i < 4; i++) { if (i % 2!=0) { Glue(Spin (ca.back[i]), cb.front[i], 1); } else { Glue(Clock(ca.back[i]), cb.front[i], 1); } } for (i = 4; i <= (8); i++) { if (i % 2 == 0) { Glue(Spin (ca.back[i]), cb.front[i], 1); } else { Glue(Clock(ca.back[i]), cb.front[i], 1); } } return ca.back[0]; } } } else if (order == 4){ ??? ca = MakeTetra4(); ??? cb = MakeTetra4(); { if (( fa == 0) && (fb == 1)) { /* must be glue ca.right <--> cb.left */ Glue(Spin(cb.left[0]), ca.right[0], 1); for (i = 1; i < 4; i++) { if (i % 2!=0) { Glue(Spin (cb.left[i]), ca.right[i], 1); } else { Glue(Spin (cb.left[i]), Spin(Clock(ca.right[i])), 1); } } for (i = 4; i <= (8); i++) { if (i % 2 == 0) { Glue(Spin (cb.left[i]), ca.right[i], 1); } else { Glue(Spin (cb.left[i]), Spin(Clock(ca.right[i])), 1); } } for (i = 9; i <= (15); i++) { if (i % 2!=0) { Glue(Spin (cb.left[i]), ca.right[i], 1); } else { Glue(Spin (cb.left[i]), Spin(Clock(ca.right[i])), 1); } } return cb.left[0]; } else if ((fa == 1) && (fb == 0)){ /* must be glue cb.right <--> ca.left */ Glue(Spin(ca.left[0]), cb.right[0], 1); for (i = 1; i < 4; i++) { if (i % 2!=0) { Glue(Spin (ca.left[i]), cb.right[i], 1); } else { Glue(Spin (ca.left[i]), Spin(Clock(cb.right[i])), 1); } } for (i = 4; i <= (8); i++) { if (i % 2 == 0) { Glue(Spin (ca.left[i]), cb.right[i], 1); } else { Glue(Spin (ca.left[i]), Spin(Clock(cb.right[i])), 1); } } for (i = 9; i <= (15); i++) { if (i % 2!=0) { Glue(Spin (ca.left[i]), cb.right[i], 1); } else { Glue(Spin (ca.left[i]), Spin(Clock(cb.right[i])), 1); } } return ca.left[0]; } else if ((fa == 3) && (fb == 2)){ /* must be glue ca.front <--> cb.back */ Glue(Spin (cb.back[0]), ca.front[0], 1); for (i = 1; i < 4; i++) { if (i % 2!=0) { Glue(Spin (cb.back[i]), ca.front[i], 1); } else { Glue(Clock(cb.back[i]), ca.front[i], 1); } } for (i = 4; i <= (8); i++) { if (i % 2 == 0) { Glue(Spin (cb.back[i]), ca.front[i], 1); } else { Glue(Clock(cb.back[i]), ca.front[i], 1); } } for (i = 9; i <= (15); i++) { if (i % 2!=0) { Glue(Spin (cb.back[i]), ca.front[i], 1); } else { Glue(Clock(cb.back[i]), ca.front[i], 1); } } return cb.back[0]; } else if ((fa == 2) && (fb == 3)){ /* must be glue ca.back <--> cb.front */ Glue(Spin (ca.back[0]), cb.front[0], 1); for (i = 1; i < 4; i++) { if (i % 2!=0) { Glue(Spin (ca.back[i]), cb.front[i], 1); } else { Glue(Clock(ca.back[i]), cb.front[i], 1); } } for (i = 4; i <= (8); i++) { if (i % 2 == 0) { Glue(Spin (ca.back[i]), cb.front[i], 1); } else { Glue(Clock(ca.back[i]), cb.front[i], 1); } } for (i = 9; i <= (15); i++) { if (i % 2!=0) { Glue(Spin (ca.back[i]), cb.front[i], 1); } else { Glue(Clock(ca.back[i]), cb.front[i], 1); } } return ca.back[0]; } } } else if (order == 5){ ??? ca = MakeTetra5(); ??? cb = MakeTetra5(); { if (( fa == 0) && (fb == 1)) { /* must be glue ca.right <--> cb.left */ Glue(Spin(cb.left[0]), ca.right[0], 1); for (i = 1; i < 4; i++) { if (i % 2!=0) { Glue(Spin (cb.left[i]), ca.right[i], 1); } else { Glue(Spin (cb.left[i]), Spin(Clock(ca.right[i])), 1); } } for (i = 4; i <= (8); i++) { if (i % 2 == 0) { Glue(Spin (cb.left[i]), ca.right[i], 1); } else { Glue(Spin (cb.left[i]), Spin(Clock(ca.right[i])), 1); } } for (i = 9; i <= (15); i++) { if (i % 2!=0) { Glue(Spin (cb.left[i]), ca.right[i], 1); } else { Glue(Spin (cb.left[i]), Spin(Clock(ca.right[i])), 1); } } for (i = 16; i <= (24); i++) { if (i % 2 == 0) { Glue(Spin (cb.left[i]), ca.right[i], 1); } else { Glue(Spin (cb.left[i]), Spin(Clock(ca.right[i])), 1); } } return cb.left[0]; } else if ((fa == 1) && (fb == 0)){ /* must be glue cb.right <--> ca.left */ Glue(Spin(ca.left[0]), cb.right[0], 1); for (i = 1; i < 4; i++) { if (i % 2!=0) { Glue(Spin (ca.left[i]), cb.right[i], 1); } else { Glue(Spin (ca.left[i]), Spin(Clock(cb.right[i])), 1); } } for (i = 4; i <= (8); i++) { if (i % 2 == 0) { Glue(Spin (ca.left[i]), cb.right[i], 1); } else { Glue(Spin (ca.left[i]), Spin(Clock(cb.right[i])), 1); } } for (i = 9; i <= (15); i++) { if (i % 2!=0) { Glue(Spin (ca.left[i]), cb.right[i], 1); } else { Glue(Spin (ca.left[i]), Spin(Clock(cb.right[i])), 1); } } for (i = 16; i <= (24); i++) { if (i % 2 == 0) { Glue(Spin (ca.left[i]), cb.right[i], 1); } else { Glue(Spin (ca.left[i]), Spin(Clock(cb.right[i])), 1); } } return ca.left[0]; } else if ((fa == 3) && (fb == 2)){ /* must be glue ca.front <--> cb.back */ Glue(Spin (cb.back[0]), ca.front[0], 1); for (i = 1; i < 4; i++) { if (i % 2!=0) { Glue(Spin (cb.back[i]), ca.front[i], 1); } else { Glue(Clock(cb.back[i]), ca.front[i], 1); } } for (i = 4; i <= (8); i++) { if (i % 2 == 0) { Glue(Spin (cb.back[i]), ca.front[i], 1); } else { Glue(Clock(cb.back[i]), ca.front[i], 1); } } for (i = 9; i <= (15); i++) { if (i % 2!=0) { Glue(Spin (cb.back[i]), ca.front[i], 1); } else { Glue(Clock(cb.back[i]), ca.front[i], 1); } } for (i = 16; i <= (24); i++) { if (i % 2 == 0) { Glue(Spin (cb.back[i]), ca.front[i], 1); } else { Glue(Clock(cb.back[i]), ca.front[i], 1); } } return cb.back[0]; ; } else if ((fa == 2) && (fb == 3)){ /* must be glue ca.back <--> cb.front */ Glue(Spin (ca.back[0]), cb.front[0], 1); for (i = 1; i < 4; i++) { if (i % 2!=0) { Glue(Spin (ca.back[i]), cb.front[i], 1); } else { Glue(Clock(ca.back[i]), cb.front[i], 1); } } for (i = 4; i <= (8); i++) { if (i % 2 == 0) { Glue(Spin (ca.back[i]), cb.front[i], 1); } else { Glue(Clock(ca.back[i]), cb.front[i], 1); } } for (i = 9; i <= (15); i++) { if (i % 2!=0) { Glue(Spin (ca.back[i]), cb.front[i], 1); } else { Glue(Clock(ca.back[i]), cb.front[i], 1); } } for (i = 16; i <= (24); i++) { if (i % 2 == 0) { Glue(Spin (ca.back[i]), cb.front[i], 1); } else { Glue(Clock(ca.back[i]), cb.front[i], 1); } } return ca.back[0]; } } } return Triangulation.MakeWedge(); } /* END GlueRefineTetra */ Place_t MakeMaximalGlue(order : uint) { if (order == 1){ ??? ca = MakeTetra1(); ??? cb = MakeTetra1(); { Glue(Spin(cb.left[0]), ca.right[0], 1); Glue(Spin(cb.front[0]), ca.back[0], 1); return cb.front[0]; } } else if (order == 2){ ??? ca = MakeTetra2(); ??? cb = MakeTetra2(); { Glue(Spin(cb.left[0]), ca.right[0], 1); for (i = 1; i < 4; i++) { if (i % 2!=0) { Glue(Spin (cb.left[i]), ca.right[i], 1); } else { Glue(Spin (cb.left[i]), Spin(Clock(ca.right[i])), 1); } } Glue(Spin(ca.back[0]), cb.front[0], 1); for (i = 1; i < 4; i++) { if (i % 2!=0) { Glue(Spin (ca.back[i]), cb.front[i], 1); } else { Glue(Clock(ca.back[i]), cb.front[i], 1); } } return ca.back[0]; } } else if (order == 3){ ??? ca = MakeTetra3(); ??? cb = MakeTetra3(); { Glue(Spin(cb.left[0]), ca.right[0], 1); for (i = 1; i < 4; i++) { if (i % 2!=0) { Glue(Spin (cb.left[i]), ca.right[i], 1); } else { Glue(Spin (cb.left[i]), Spin(Clock(ca.right[i])), 1); } } for (i = 4; i <= (8); i++) { if (i % 2 == 0) { Glue(Spin (cb.left[i]), ca.right[i], 1); } else { Glue(Spin (cb.left[i]), Spin(Clock(ca.right[i])), 1); } } Glue(Spin (ca.back[0]), cb.front[0], 1); for (i = 1; i < 4; i++) { if (i % 2!=0) { Glue(Spin (ca.back[i]), cb.front[i], 1); } else { Glue(Clock(ca.back[i]), cb.front[i], 1); } } for (i = 4; i <= (8); i++) { if (i % 2 == 0) { Glue(Spin (ca.back[i]), cb.front[i], 1); } else { Glue(Clock(ca.back[i]), cb.front[i], 1); } } return ca.back[0]; } } else if (order == 4){ ??? ca = MakeTetra4(); ??? cb = MakeTetra4(); { Glue(Spin(cb.left[0]), ca.right[0], 1); for (i = 1; i < 4; i++) { if (i % 2!=0) { Glue(Spin (cb.left[i]), ca.right[i], 1); } else { Glue(Spin (cb.left[i]), Spin(Clock(ca.right[i])), 1); } } for (i = 4; i <= (8); i++) { if (i % 2 == 0) { Glue(Spin (cb.left[i]), ca.right[i], 1); } else { Glue(Spin (cb.left[i]), Spin(Clock(ca.right[i])), 1); } } for (i = 9; i <= (15); i++) { if (i % 2!=0) { Glue(Spin (cb.left[i]), ca.right[i], 1); } else { Glue(Spin (cb.left[i]), Spin(Clock(ca.right[i])), 1); } } Glue(Spin (ca.back[0]), cb.front[0], 1); for (i = 1; i < 4; i++) { if (i % 2!=0) { Glue(Spin (ca.back[i]), cb.front[i], 1); } else { Glue(Clock(ca.back[i]), cb.front[i], 1); } } for (i = 4; i <= (8); i++) { if (i % 2 == 0) { Glue(Spin (ca.back[i]), cb.front[i], 1); } else { Glue(Clock(ca.back[i]), cb.front[i], 1); } } for (i = 9; i <= (15); i++) { if (i % 2!=0) { Glue(Spin (ca.back[i]), cb.front[i], 1); } else { Glue(Clock(ca.back[i]), cb.front[i], 1); } } return ca.back[0]; } } else if (order == 5){ ??? ca = MakeTetra5(); ??? cb = MakeTetra5(); { Glue(Spin(cb.left[0]), ca.right[0], 1); for (i = 1; i < 4; i++) { if (i % 2!=0) { Glue(Spin (cb.left[i]), ca.right[i], 1); } else { Glue(Spin (cb.left[i]), Spin(Clock(ca.right[i])), 1); } } for (i = 4; i <= (8); i++) { if (i % 2 == 0) { Glue(Spin (cb.left[i]), ca.right[i], 1); } else { Glue(Spin (cb.left[i]), Spin(Clock(ca.right[i])), 1); } } for (i = 9; i <= (15); i++) { if (i % 2!=0) { Glue(Spin (cb.left[i]), ca.right[i], 1); } else { Glue(Spin (cb.left[i]), Spin(Clock(ca.right[i])), 1); } } for (i = 16; i <= (24); i++) { if (i % 2 == 0) { Glue(Spin (cb.left[i]), ca.right[i], 1); } else { Glue(Spin (cb.left[i]), Spin(Clock(ca.right[i])), 1); } } Glue(Spin (ca.back[0]), cb.front[0], 1); for (i = 1; i < 4; i++) { if (i % 2!=0) { Glue(Spin (ca.back[i]), cb.front[i], 1); } else { Glue(Clock(ca.back[i]), cb.front[i], 1); } } for (i = 4; i <= (8); i++) { if (i % 2 == 0) { Glue(Spin (ca.back[i]), cb.front[i], 1); } else { Glue(Clock(ca.back[i]), cb.front[i], 1); } } for (i = 9; i <= (15); i++) { if (i % 2!=0) { Glue(Spin (ca.back[i]), cb.front[i], 1); } else { Glue(Clock(ca.back[i]), cb.front[i], 1); } } for (i = 16; i <= (24); i++) { if (i % 2 == 0) { Glue(Spin (ca.back[i]), cb.front[i], 1); } else { Glue(Clock(ca.back[i]), cb.front[i], 1); } } return ca.back[0]; } } return Triangulation.MakeWedge(); } /* END MakeMaximalGlue */ void HideWall(Place_t @p) /* This procedure do the following sets: Walls : PWall(a) = FALSE @{Edge->?}s: PEdge(a) = FALSE PEdge(NextE(a)) = FALSE PEdge(PrevE(a)) = FALSE Nodes: OrgV(a) == FALSE OrgV(NextE(a)) == FALSE OrgV(PrevE(a)) == FALSE */ { Place_t b = NextE(a); Place_t c = PrevE(a); { /* setting wall */ PWall(a)->exists = FALSE; /* setting @{edge->?}s */ PEdge(a)->exists = FALSE; PEdge(b)->exists = FALSE; PEdge(c)->exists = FALSE; /* setting nodes */ OrgV(a)->exists = FALSE; OrgV(a).label = "VF"; OrgV(b)->exists = FALSE; OrgV(c)->exists = FALSE; } } /* END HideWall */ void SetLackNodes(ord: uint; co: Corner) /* Set the lack nodes as existing on the boundary of a refined tetrahedron of order "ord". */ PROCEDURE SetNodesOn@{Edge->?}(Place_t @p) == { ??? r = PWedge(co.right[0]).edge.radius; Node_t v = OrgV(a); { v->exists = TRUE; v.radius = r; v.label = "VE"; } } SetNodesOn@{Edge->?}; { if (ord == 2){ SetNodesOn@{Edge->?}(co.right[0]); SetNodesOn@{Edge->?}(co.right[2]); SetNodesOn@{Edge->?}(co.right[3]); /* */ SetNodesOn@{Edge->?}(Clock(co.left[2])); /* */ SetNodesOn@{Edge->?}(co.left[3]); /* */ SetNodesOn@{Edge->?}(co.front[3]); } else if (ord == 3){ SetNodesOn@{Edge->?}(co.right[0]); SetNodesOn@{Edge->?}(co.right[1]); SetNodesOn@{Edge->?}(co.right[2]); SetNodesOn@{Edge->?}(co.right[7]); SetNodesOn@{Edge->?}(co.right[8]); SetNodesOn@{Edge->?}(co.right[6]); /* */ SetNodesOn@{Edge->?}(Clock(co.left[2])); SetNodesOn@{Edge->?}(Clock(co.left[7])); /* */ SetNodesOn@{Edge->?}(co.left[5]); SetNodesOn@{Edge->?}(co.left[7]); /* */ SetNodesOn@{Edge->?}(co.front[6]); SetNodesOn@{Edge->?}(co.front[8]); } else if (ord == 4){ SetNodesOn@{Edge->?}(co.right[0 ]); SetNodesOn@{Edge->?}(co.right[1 ]); SetNodesOn@{Edge->?}(co.right[4 ]); SetNodesOn@{Edge->?}(co.right[2 ]); SetNodesOn@{Edge->?}(co.right[7 ]); SetNodesOn@{Edge->?}(co.right[14]); SetNodesOn@{Edge->?}(co.right[15]); SetNodesOn@{Edge->?}(co.right[13]); SetNodesOn@{Edge->?}(co.right[11]); /* */ SetNodesOn@{Edge->?}(Clock(co.left[ 2])); SetNodesOn@{Edge->?}(Clock(co.left[ 7])); SetNodesOn@{Edge->?}(Clock(co.left[14])); /* */ SetNodesOn@{Edge->?}(co.left[10]); SetNodesOn@{Edge->?}(co.left[12]); SetNodesOn@{Edge->?}(co.left[14]); /* */ SetNodesOn@{Edge->?}(co.front[11]); SetNodesOn@{Edge->?}(co.front[13]); SetNodesOn@{Edge->?}(co.front[15]); /* setting node label on wall */ } else if (ord == 5){ SetNodesOn@{Edge->?}(co.right[ 0]); SetNodesOn@{Edge->?}(co.right[ 1]); SetNodesOn@{Edge->?}(co.right[ 4]); SetNodesOn@{Edge->?}(co.right[ 9]); SetNodesOn@{Edge->?}(co.right[ 2]); SetNodesOn@{Edge->?}(co.right[ 7]); SetNodesOn@{Edge->?}(co.right[14]); SetNodesOn@{Edge->?}(co.right[23]); SetNodesOn@{Edge->?}(co.right[24]); SetNodesOn@{Edge->?}(co.right[22]); SetNodesOn@{Edge->?}(co.right[20]); SetNodesOn@{Edge->?}(co.right[18]); /* */ SetNodesOn@{Edge->?}(Clock(co.left[ 2])); SetNodesOn@{Edge->?}(Clock(co.left[ 7])); SetNodesOn@{Edge->?}(Clock(co.left[14])); SetNodesOn@{Edge->?}(Clock(co.left[23])); /* */ SetNodesOn@{Edge->?}(co.left[17]); SetNodesOn@{Edge->?}(co.left[19]); SetNodesOn@{Edge->?}(co.left[21]); SetNodesOn@{Edge->?}(co.left[23]); /* */ SetNodesOn@{Edge->?}(co.front[18]); SetNodesOn@{Edge->?}(co.front[20]); SetNodesOn@{Edge->?}(co.front[22]); SetNodesOn@{Edge->?}(co.front[24]); } } /* END SetLackNodes */ void SetGrade(ord: uint; co: Corner) /* Set @{edge->?}s and spheres underling on the boundary of a tetrahedron as thin cylinders and small spheres. */ void SetNodeOnNet(Place_t @p) { Node_t vn = OrgV(a); { vn->exists = TRUE; vn.radius = 0.025; vn.color = (frgb_t){1.00,1.00,0.50}; } } SetNodeOnNet; void SetEdgeOnNet(Place_t @p) { Edge_t en = PEdge(a); { en->exists = TRUE; en.radius = 0.0025; en.color = (frgb_t){1.00,1.00,0.5}; } } SetEdgeOnNet; void SetGrade1() { /* nothing */ } SetGrade1; void SetGrade2() { /* 3 @{edge->?}s and 0 nodes for each wall of the refined tetrahedron. */ /* On the right side. */ SetEdgeOnNet(PrevE(co.right[0])); SetEdgeOnNet( co.right[3]); SetEdgeOnNet(NextE (co.right[2])); /* On the left side. */ SetEdgeOnNet(PrevE(co.left[0])); SetEdgeOnNet( co.left[2]); SetEdgeOnNet(NextE (co.left[1])); /* On the front side. */ SetEdgeOnNet( co.front[0]); SetEdgeOnNet(NextE (co.front[1])); SetEdgeOnNet(NextE (co.front[2])); /* On the back side. */ SetEdgeOnNet( co.back [0]); SetEdgeOnNet(NextE (co.back [1])); SetEdgeOnNet(PrevE(co.back [2])); } SetGrade2; void SetGrade3() { /* 9 @{edge->?}s and 1 nodes for each wall of the refined tetrahedron. */ SetGrade2(); /* On the right side. */ SetEdgeOnNet(PrevE(co.right[3])); SetEdgeOnNet(PrevE(co.right[1])); SetEdgeOnNet( co.right[8]); SetEdgeOnNet(NextE (co.right[7])); SetEdgeOnNet( co.right[6]); SetEdgeOnNet(NextE (co.right[5])); SetNodeOnNet(co.right[3]); /* On the left side. */ SetEdgeOnNet(PrevE(co.left[1])); SetEdgeOnNet(PrevE(co.left[3])); SetEdgeOnNet(NextE (co.left[4])); SetEdgeOnNet( co.left[5]); SetEdgeOnNet(NextE (co.left[6])); SetEdgeOnNet( co.left[7]); SetNodeOnNet(co.left[3]); /* On the front side. */ SetEdgeOnNet( co.front[1]); SetEdgeOnNet( co.front[3]); SetEdgeOnNet(NextE (co.front[4])); SetEdgeOnNet(NextE (co.front[5])); SetEdgeOnNet(NextE (co.front[6])); SetEdgeOnNet(NextE (co.front[7])); SetNodeOnNet(co.front[3]); /* On the back side. */ SetEdgeOnNet( co.back [1]); SetEdgeOnNet( co.back [3]); SetEdgeOnNet(NextE (co.back [4])); SetEdgeOnNet(PrevE(co.back [5])); SetEdgeOnNet(NextE (co.back [6])); SetEdgeOnNet(PrevE(co.back [7])); SetNodeOnNet(co.back[3]); } SetGrade3; void SetGrade4() { /* 18 @{edge->?}s and 3 nodes for each wall of the refined tetrahedron. */ SetGrade3(); /* On the right side. */ SetEdgeOnNet(PrevE(co.right[8])); SetEdgeOnNet(PrevE(co.right[6])); SetEdgeOnNet(PrevE(co.right[4])); SetEdgeOnNet( co.right[15]); SetEdgeOnNet(NextE (co.right[14])); SetEdgeOnNet( co.right[13]); SetEdgeOnNet(NextE (co.right[12])); SetEdgeOnNet( co.right[11]); SetEdgeOnNet(NextE (co.right[10])); SetNodeOnNet(co.right[8]); SetNodeOnNet(co.right[6]); /* On the left side. */ SetEdgeOnNet(PrevE(co.left[4])); SetEdgeOnNet(PrevE(co.left[6])); SetEdgeOnNet(PrevE(co.left[8])); SetEdgeOnNet(NextE (co.left[9 ])); SetEdgeOnNet( co.left[10]); SetEdgeOnNet(NextE (co.left[11])); SetEdgeOnNet( co.left[12]); SetEdgeOnNet(NextE (co.left[13])); SetEdgeOnNet( co.left[14]); SetNodeOnNet(co.left[8]); SetNodeOnNet(co.left[6]); /* On the front side. */ SetEdgeOnNet( co.front[4]); SetEdgeOnNet( co.front[6]); SetEdgeOnNet( co.front[8]); SetEdgeOnNet(NextE (co.front[ 9])); SetEdgeOnNet(NextE (co.front[10])); SetEdgeOnNet(NextE (co.front[11])); SetEdgeOnNet(NextE (co.front[12])); SetEdgeOnNet(NextE (co.front[13])); SetEdgeOnNet(NextE (co.front[14])); SetNodeOnNet(co.front[8]); SetNodeOnNet(co.front[6]); /* On the back side. */ SetEdgeOnNet( co.back [4]); SetEdgeOnNet( co.back [6]); SetEdgeOnNet( co.back [8]); SetEdgeOnNet(NextE (co.back [ 9])); SetEdgeOnNet(PrevE(co.back [10])); SetEdgeOnNet(NextE (co.back [11])); SetEdgeOnNet(PrevE(co.back [12])); SetEdgeOnNet(NextE (co.back [13])); SetEdgeOnNet(PrevE(co.back [14])); SetNodeOnNet(co.back[8]); SetNodeOnNet(co.back[6]); } SetGrade4; void SetGrade5() { /* 10 @{edge->?}s and 6 nodes for each wall of the refined tetrahedron. */ SetGrade4(); /* On the right side. */ SetEdgeOnNet(PrevE(co.right[15])); SetEdgeOnNet(PrevE(co.right[13])); SetEdgeOnNet(PrevE(co.right[11])); SetEdgeOnNet(PrevE(co.right[ 9])); SetEdgeOnNet( co.right[24]); SetEdgeOnNet(NextE (co.right[23])); SetEdgeOnNet( co.right[22]); SetEdgeOnNet(NextE (co.right[21])); SetEdgeOnNet( co.right[20]); SetEdgeOnNet(NextE (co.right[19])); SetEdgeOnNet( co.right[18]); SetEdgeOnNet(NextE (co.right[17])); SetNodeOnNet(co.right[15]); SetNodeOnNet(co.right[13]); SetNodeOnNet(co.right[11]); /* On the left side. */ SetEdgeOnNet(PrevE(co.left[ 9])); SetEdgeOnNet(PrevE(co.left[11])); SetEdgeOnNet(PrevE(co.left[13])); SetEdgeOnNet(PrevE(co.left[15])); SetEdgeOnNet(NextE (co.left[16])); SetEdgeOnNet( co.left[17]); SetEdgeOnNet(NextE (co.left[18])); SetEdgeOnNet( co.left[19]); SetEdgeOnNet(NextE (co.left[20])); SetEdgeOnNet( co.left[21]); SetEdgeOnNet(NextE (co.left[22])); SetEdgeOnNet( co.left[23]); SetNodeOnNet(co.left[15]); SetNodeOnNet(co.left[13]); SetNodeOnNet(co.left[11]); /* On the front side. */ SetEdgeOnNet( co.front[ 9]); SetEdgeOnNet( co.front[11]); SetEdgeOnNet( co.front[13]); SetEdgeOnNet( co.front[15]); SetEdgeOnNet(NextE (co.front[16])); SetEdgeOnNet(NextE (co.front[17])); SetEdgeOnNet(NextE (co.front[18])); SetEdgeOnNet(NextE (co.front[19])); SetEdgeOnNet(NextE (co.front[20])); SetEdgeOnNet(NextE (co.front[21])); SetEdgeOnNet(NextE (co.front[22])); SetEdgeOnNet(NextE (co.front[23])); SetNodeOnNet(co.front[15]); SetNodeOnNet(co.front[13]); SetNodeOnNet(co.front[11]); /* On the back side. */ SetEdgeOnNet( co.back [ 9]); SetEdgeOnNet( co.back [11]); SetEdgeOnNet( co.back [13]); SetEdgeOnNet( co.back [15]); SetEdgeOnNet(NextE (co.back [16])); SetEdgeOnNet(PrevE(co.back [17])); SetEdgeOnNet(NextE (co.back [18])); SetEdgeOnNet(PrevE(co.back [19])); SetEdgeOnNet(NextE (co.back [20])); SetEdgeOnNet(PrevE(co.back [21])); SetEdgeOnNet(NextE (co.back [22])); SetEdgeOnNet(PrevE(co.back [23])); SetNodeOnNet(co.back[15]); SetNodeOnNet(co.back[13]); SetNodeOnNet(co.back[11]); } SetGrade5; { if ( ord == 1){ SetGrade1(); } else if (ord == 2){ SetGrade2(); } else if (ord == 3){ SetGrade3(); } else if (ord == 4){ SetGrade4(); } else if (ord == 5){ SetGrade5(); } else { fprintf(stderr,"Order must be less equal to 5\n"); assert(ord <= 5); } } /* END SetGrade */ PROCEDURE MakeTriangle() : ARRAY [0..2] OF Place_t == /* Builds a triangular wall and set the three places with the same wall component. */ Place_t t[2+1]; { Place_t a = MakeWedge(); Place_t b = MakeWedge(); Place_t c = MakeWedge(); Wall_t f = PWall(a); Node_t u = MakeNode(0); Node_t v = MakeNode(1); Node_t w = MakeNode(2); { SetOrg(a, u); SetOrg(Clock(a),v); SetNextE(a,b); SetWallInfo(b,f); SetOrg(b,v); SetOrg(Clock(b),w); SetNextE(b,c); SetWallInfo(c,f); SetOrg(c, w); SetOrg(Clock(c), OrgV(a)); assert(NextE(c) == a); t[0] = a; t[1] = b; t[2] = c; return t; } } /* END MakeTriangle */ void SetOrgCycle(Place_t @p, n: Node) /* Set all @places adjacent to "a" and underling on the 2D star of the node {n} with this node. */ void SetOrgWall(b: Place_t) /* Set all @places adjacent to "a" on the NextF's ring with the node {n}.*/ Place_t bn = b; VAR { do { SetOrg(bn,n); bn = NextF(bn); } while (bn != b); } SetOrgWall; Place_t an = a; { do { SetOrgWall(an); an = ONext(an); } while (an != a); } /* END SetOrgCycle */ Place_t Enext0(Place_t @p) { return a; } /* END Enext0 */ Place_t Enext1(Place_t @p) { return NextE(a); } /* END Enext1 */ Place_t NextE2(Place_t @p) { return NextE(NextE(a)); } /* END NextE2 */ Place_t ClockSpinEnext0(Place_t @p) { return Clock(Spin(Enext0(a))); } /* END ClockSpinEnext0 */ Place_t ClockSpinEnext1(Place_t @p) { return Clock(Spin(Enext1(a))); } /* END ClockSpinEnext1 */ Place_t ClockSpinNextE2(Place_t @p) { return Clock(Spin(NextE2(a))); } /* END ClockSpinNextE2 */ Place_t FnextEnext(Place_t @p) { return NextF(NextE(a)); } /* END FnextEnext */ Place_vec_t *Place_tsOnFrontier(Corner *co, uint cnum, uint order)== nc : REF Place_vec_t; { nc = Place_vec_new(order*order); if (cnum == 0) { if (order == 1) { nc[ 0] = Enext0(co.right[ 0]); } else if (order == 2){ nc[ 0] = Enext0(co.right[ 1]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = Enext0(co.right[ 0]); /* */ nc[ 3] = Enext0(co.right[ 3]); } else if (order == 3){ nc[ 0] = Enext0(co.right[ 4]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = Enext0(co.right[ 1]); nc[ 3] = FnextEnext(nc[2]); nc[ 4] = Enext0(co.right[ 0]); /* */ nc[ 5] = Enext0(co.right[ 6]); nc[ 6] = FnextEnext(nc[5]); nc[ 7] = Enext0(co.right[ 3]); /* */ nc[ 8] = Enext0(co.right[ 8]); } else if (order == 4){ nc[ 0] = Enext0(co.right[ 9]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = Enext0(co.right[ 4]); nc[ 3] = FnextEnext(nc[ 2]); nc[ 4] = Enext0(co.right[ 1]); nc[ 5] = FnextEnext(nc[ 4]); nc[ 6] = Enext0(co.right[ 0]); /* */ nc[ 7] = Enext0(co.right[11]); nc[ 8] = FnextEnext(nc[ 7]); nc[ 9] = Enext0(co.right[ 6]); nc[10] = FnextEnext(nc[ 9]); nc[11] = Enext0(co.right[ 3]); /* */ nc[12] = Enext0(co.right[13]); nc[13] = FnextEnext(nc[12]); nc[14] = Enext0(co.right[ 8]); /* */ nc[15] = Enext0(co.right[15]); } else if (order == 5){ nc[ 0] = Enext0(co.right[16]); nc[ 1] = FnextEnext(nc[ 0]); nc[ 2] = Enext0(co.right[ 9]); nc[ 3] = FnextEnext(nc[ 2]); nc[ 4] = Enext0(co.right[ 4]); nc[ 5] = FnextEnext(nc[ 4]); nc[ 6] = Enext0(co.right[ 1]); nc[ 7] = FnextEnext(nc[ 6]); nc[ 8] = Enext0(co.right[ 0]); /* */ nc[ 9] = Enext0(co.right[18]); nc[10] = FnextEnext(nc[ 9]); nc[11] = Enext0(co.right[11]); nc[12] = FnextEnext(nc[11]); nc[13] = Enext0(co.right[ 6]); nc[14] = FnextEnext(nc[13]); nc[15] = Enext0(co.right[ 3]); /* */ nc[16] = Enext0(co.right[20]); nc[17] = FnextEnext(nc[16]); nc[18] = Enext0(co.right[13]); nc[19] = FnextEnext(nc[18]); nc[20] = Enext0(co.right[ 8]); /* */ nc[21] = Enext0(co.right[22]); nc[22] = FnextEnext(nc[21]); nc[23] = Enext0(co.right[15]); /* */ nc[24] = Enext0(co.right[24]); } } if (cnum == 1) { if (order == 1) { nc[ 0] = Enext1(co.right[ 0]); } else if (order == 2){ nc[ 0] = Enext1(co.right[ 0]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = Enext1(co.right[ 3]); /* */ nc[ 3] = Enext1(co.right[ 1]); } else if (order == 3){ nc[ 0] = Enext1(co.right[ 0]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = Enext1(co.right[ 3]); nc[ 3] = FnextEnext(nc[2]); nc[ 4] = Enext1(co.right[ 8]); /* */ nc[ 5] = Enext1(co.right[ 1]); nc[ 6] = FnextEnext(nc[5]); nc[ 7] = Enext1(co.right[ 6]); /* */ nc[ 8] = Enext1(co.right[ 4]); } else if (order == 4){ nc[ 0] = Enext1(co.right[ 0]); nc[ 1] = FnextEnext(nc[ 0]); nc[ 2] = Enext1(co.right[ 3]); nc[ 3] = FnextEnext(nc[ 2]); nc[ 4] = Enext1(co.right[ 8]); nc[ 5] = FnextEnext(nc[ 4]); nc[ 6] = Enext1(co.right[15]); /* */ nc[ 7] = Enext1(co.right[ 1]); nc[ 8] = FnextEnext(nc[ 7]); nc[ 9] = Enext1(co.right[ 6]); nc[10] = FnextEnext(nc[ 9]); nc[11] = Enext1(co.right[13]); /* */ nc[12] = Enext1(co.right[ 4]); nc[13] = FnextEnext(nc[12]); nc[14] = Enext1(co.right[11]); /* */ nc[15] = Enext1(co.right[ 9]); } else if (order == 5){ nc[ 0] = Enext1(co.right[ 0]); nc[ 1] = FnextEnext(nc[ 0]); nc[ 2] = Enext1(co.right[ 3]); nc[ 3] = FnextEnext(nc[ 2]); nc[ 4] = Enext1(co.right[ 8]); nc[ 5] = FnextEnext(nc[ 4]); nc[ 6] = Enext1(co.right[15]); nc[ 7] = FnextEnext(nc[ 6]); nc[ 8] = Enext1(co.right[24]); /* */ nc[ 9] = Enext1(co.right[ 1]); nc[10] = FnextEnext(nc[ 9]); nc[11] = Enext1(co.right[ 6]); nc[12] = FnextEnext(nc[11]); nc[13] = Enext1(co.right[13]); nc[14] = FnextEnext(nc[13]); nc[15] = Enext1(co.right[22]); /* */ nc[16] = Enext1(co.right[ 4]); nc[17] = FnextEnext(nc[16]); nc[18] = Enext1(co.right[11]); nc[19] = FnextEnext(nc[18]); nc[20] = Enext1(co.right[20]); /* */ nc[21] = Enext1(co.right[ 9]); nc[22] = FnextEnext(nc[21]); nc[23] = Enext1(co.right[18]); /* */ nc[24] = Enext1(co.right[16]); } } if (cnum == 2) { if (order == 1) { nc[ 0] = NextE2(co.right[ 0]); } else if (order == 2){ nc[ 0] = NextE2(co.right[ 3]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = NextE2(co.right[ 1]); /* */ nc[ 3] = NextE2(co.right[ 0]); } else if (order == 3){ nc[ 0] = NextE2(co.right[ 8]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = NextE2(co.right[ 6]); nc[ 3] = FnextEnext(nc[2]); nc[ 4] = NextE2(co.right[ 4]); /* */ nc[ 5] = NextE2(co.right[ 3]); nc[ 6] = FnextEnext(nc[5]); nc[ 7] = NextE2(co.right[ 1]); /* */ nc[ 8] = NextE2(co.right[ 0]); } else if (order == 4){ nc[ 0] = NextE2(co.right[15]); nc[ 1] = FnextEnext(nc[ 0]); nc[ 2] = NextE2(co.right[13]); nc[ 3] = FnextEnext(nc[ 2]); nc[ 4] = NextE2(co.right[11]); nc[ 5] = FnextEnext(nc[ 4]); nc[ 6] = NextE2(co.right[ 9]); /* */ nc[ 7] = NextE2(co.right[ 8]); nc[ 8] = FnextEnext(nc[ 7]); nc[ 9] = NextE2(co.right[ 6]); nc[10] = FnextEnext(nc[ 9]); nc[11] = NextE2(co.right[ 4]); /* */ nc[12] = NextE2(co.right[ 3]); nc[13] = FnextEnext(nc[12]); nc[14] = NextE2(co.right[ 1]); /* */ nc[15] = NextE2(co.right[ 0]); } else if (order == 5){ nc[ 0] = NextE2(co.right[24]); nc[ 1] = FnextEnext(nc[ 0]); nc[ 2] = NextE2(co.right[22]); nc[ 3] = FnextEnext(nc[ 2]); nc[ 4] = NextE2(co.right[20]); nc[ 5] = FnextEnext(nc[ 4]); nc[ 6] = NextE2(co.right[18]); nc[ 7] = FnextEnext(nc[ 6]); nc[ 8] = NextE2(co.right[16]); /* */ nc[ 9] = NextE2(co.right[15]); nc[10] = FnextEnext(nc[ 9]); nc[11] = NextE2(co.right[13]); nc[12] = FnextEnext(nc[11]); nc[13] = NextE2(co.right[11]); nc[14] = FnextEnext(nc[13]); nc[15] = NextE2(co.right[ 9]); /* */ nc[16] = NextE2(co.right[ 8]); nc[17] = FnextEnext(nc[16]); nc[18] = NextE2(co.right[ 6]); nc[19] = FnextEnext(nc[18]); nc[20] = NextE2(co.right[ 4]); /* */ nc[21] = NextE2(co.right[ 3]); nc[22] = FnextEnext(nc[21]); nc[23] = NextE2(co.right[ 1]); /* */ nc[24] = NextE2(co.right[ 0]); } } if (cnum == 3) { if (order == 1) { nc[ 0] = Enext0(co.left[ 0]); } else if (order == 2){ nc[ 0] = Enext0(co.left[ 1]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = Enext0(co.left[ 0]); /* */ nc[ 3] = Enext0(co.left[ 3]); } else if (order == 3){ nc[ 0] = Enext0(co.left[ 4]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = Enext0(co.left[ 1]); nc[ 3] = FnextEnext(nc[2]); nc[ 4] = Enext0(co.left[ 0]); /* */ nc[ 5] = Enext0(co.left[ 6]); nc[ 6] = FnextEnext(nc[5]); nc[ 7] = Enext0(co.left[ 3]); /* */ nc[ 8] = Enext0(co.left[ 8]); } else if (order == 4){ nc[ 0] = Enext0(co.left[ 9]); nc[ 1] = FnextEnext(nc[ 0]); nc[ 2] = Enext0(co.left[ 4]); nc[ 3] = FnextEnext(nc[ 2]); nc[ 4] = Enext0(co.left[ 1]); nc[ 5] = FnextEnext(nc[ 4]); nc[ 6] = Enext0(co.left[ 0]); /* */ nc[ 7] = Enext0(co.left[11]); nc[ 8] = FnextEnext(nc[ 7]); nc[ 9] = Enext0(co.left[ 6]); nc[10] = FnextEnext(nc[ 9]); nc[11] = Enext0(co.left[ 3]); /* */ nc[12] = Enext0(co.left[13]); nc[13] = FnextEnext(nc[12]); nc[14] = Enext0(co.left[ 8]); /* */ nc[15] = Enext0(co.left[15]); } else if (order == 5){ nc[ 0] = Enext0(co.left[16]); nc[ 1] = FnextEnext(nc[ 0]); nc[ 2] = Enext0(co.left[ 9]); nc[ 3] = FnextEnext(nc[ 2]); nc[ 4] = Enext0(co.left[ 4]); nc[ 5] = FnextEnext(nc[ 4]); nc[ 6] = Enext0(co.left[ 1]); nc[ 7] = FnextEnext(nc[ 6]); nc[ 8] = Enext0(co.left[ 0]); /* */ nc[ 9] = Enext0(co.left[18]); nc[10] = FnextEnext(nc[ 9]); nc[11] = Enext0(co.left[11]); nc[12] = FnextEnext(nc[11]); nc[13] = Enext0(co.left[ 6]); nc[14] = FnextEnext(nc[13]); nc[15] = Enext0(co.left[ 3]); /* */ nc[16] = Enext0(co.left[20]); nc[17] = FnextEnext(nc[16]); nc[18] = Enext0(co.left[13]); nc[19] = FnextEnext(nc[18]); nc[20] = Enext0(co.left[ 8]); /* */ nc[21] = Enext0(co.left[22]); nc[22] = FnextEnext(nc[21]); nc[23] = Enext0(co.left[15]); /* */ nc[24] = Enext0(co.left[24]); } } if (cnum == 4) { if (order == 1) { nc[ 0] = Enext1(co.left[ 0]); } else if (order == 2){ nc[ 0] = Enext1(co.left[ 0]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = Enext1(co.left[ 3]); /* */ nc[ 3] = Enext1(co.left[ 1]); } else if (order == 3){ nc[ 0] = Enext1(co.left[ 0]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = Enext1(co.left[ 3]); nc[ 3] = FnextEnext(nc[2]); nc[ 4] = Enext1(co.left[ 8]); /* */ nc[ 5] = Enext1(co.left[ 1]); nc[ 6] = FnextEnext(nc[5]); nc[ 7] = Enext1(co.left[ 6]); /* */ nc[ 8] = Enext1(co.left[ 4]); } else if (order == 4){ nc[ 0] = Enext1(co.left[ 0]); nc[ 1] = FnextEnext(nc[ 0]); nc[ 2] = Enext1(co.left[ 3]); nc[ 3] = FnextEnext(nc[ 2]); nc[ 4] = Enext1(co.left[ 8]); nc[ 5] = FnextEnext(nc[ 4]); nc[ 6] = Enext1(co.left[15]); /* */ nc[ 7] = Enext1(co.left[ 1]); nc[ 8] = FnextEnext(nc[ 7]); nc[ 9] = Enext1(co.left[ 6]); nc[10] = FnextEnext(nc[ 9]); nc[11] = Enext1(co.left[13]); /* */ nc[12] = Enext1(co.left[ 4]); nc[13] = FnextEnext(nc[12]); nc[14] = Enext1(co.left[11]); /* */ nc[15] = Enext1(co.left[ 9]); } else if (order == 5){ nc[ 0] = Enext1(co.left[ 0]); nc[ 1] = FnextEnext(nc[ 0]); nc[ 2] = Enext1(co.left[ 3]); nc[ 3] = FnextEnext(nc[ 2]); nc[ 4] = Enext1(co.left[ 8]); nc[ 5] = FnextEnext(nc[ 4]); nc[ 6] = Enext1(co.left[15]); nc[ 7] = FnextEnext(nc[ 6]); nc[ 8] = Enext1(co.left[24]); /* */ nc[ 9] = Enext1(co.left[ 1]); nc[10] = FnextEnext(nc[ 9]); nc[11] = Enext1(co.left[ 6]); nc[12] = FnextEnext(nc[11]); nc[13] = Enext1(co.left[13]); nc[14] = FnextEnext(nc[13]); nc[15] = Enext1(co.left[22]); /* */ nc[16] = Enext1(co.left[ 4]); nc[17] = FnextEnext(nc[16]); nc[18] = Enext1(co.left[11]); nc[19] = FnextEnext(nc[18]); nc[20] = Enext1(co.left[20]); /* */ nc[21] = Enext1(co.left[ 9]); nc[22] = FnextEnext(nc[21]); nc[23] = Enext1(co.left[18]); /* */ nc[24] = Enext1(co.left[16]); } } if (cnum == 5) { if (order == 1) { nc[ 0] = NextE2(co.left[ 0]); } else if (order == 2){ nc[ 0] = NextE2(co.left[ 3]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = NextE2(co.left[ 1]); /* */ nc[ 3] = NextE2(co.left[ 0]); } else if (order == 3){ nc[ 0] = NextE2(co.left[ 8]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = NextE2(co.left[ 6]); nc[ 3] = FnextEnext(nc[2]); nc[ 4] = NextE2(co.left[ 4]); /* */ nc[ 5] = NextE2(co.left[ 3]); nc[ 6] = FnextEnext(nc[5]); nc[ 7] = NextE2(co.left[ 1]); /* */ nc[ 8] = NextE2(co.left[ 0]); } else if (order == 4){ nc[ 0] = NextE2(co.left[15]); nc[ 1] = FnextEnext(nc[ 0]); nc[ 2] = NextE2(co.left[13]); nc[ 3] = FnextEnext(nc[ 2]); nc[ 4] = NextE2(co.left[11]); nc[ 5] = FnextEnext(nc[ 4]); nc[ 6] = NextE2(co.left[ 9]); /* */ nc[ 7] = NextE2(co.left[ 8]); nc[ 8] = FnextEnext(nc[ 7]); nc[ 9] = NextE2(co.left[ 6]); nc[10] = FnextEnext(nc[ 9]); nc[11] = NextE2(co.left[ 4]); /* */ nc[12] = NextE2(co.left[ 3]); nc[13] = FnextEnext(nc[12]); nc[14] = NextE2(co.left[ 1]); /* */ nc[15] = NextE2(co.left[ 0]); } else if (order == 5){ nc[ 0] = NextE2(co.left[24]); nc[ 1] = FnextEnext(nc[ 0]); nc[ 2] = NextE2(co.left[22]); nc[ 3] = FnextEnext(nc[ 2]); nc[ 4] = NextE2(co.left[20]); nc[ 5] = FnextEnext(nc[ 4]); nc[ 6] = NextE2(co.left[18]); nc[ 7] = FnextEnext(nc[ 6]); nc[ 8] = NextE2(co.left[16]); /* */ nc[ 9] = NextE2(co.left[15]); nc[10] = FnextEnext(nc[ 9]); nc[11] = NextE2(co.left[13]); nc[12] = FnextEnext(nc[11]); nc[13] = NextE2(co.left[11]); nc[14] = FnextEnext(nc[13]); nc[15] = NextE2(co.left[ 9]); /* */ nc[16] = NextE2(co.left[ 8]); nc[17] = FnextEnext(nc[16]); nc[18] = NextE2(co.left[ 6]); nc[19] = FnextEnext(nc[18]); nc[20] = NextE2(co.left[ 4]); /* */ nc[21] = NextE2(co.left[ 3]); nc[22] = FnextEnext(nc[21]); nc[23] = NextE2(co.left[ 1]); /* */ nc[24] = NextE2(co.left[ 0]); } } if (cnum == 6) { if (order == 1) { nc[ 0] = ClockSpinEnext1(co.front[ 0]); } else if (order == 2){ nc[ 0] = ClockSpinEnext1(co.front[ 0]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = ClockSpinEnext1(co.front[ 3]); /* */ nc[ 3] = ClockSpinEnext1(co.front[ 1]); } else if (order == 3){ nc[ 0] = ClockSpinEnext1(co.front[ 0]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = ClockSpinEnext1(co.front[ 3]); nc[ 3] = FnextEnext(nc[2]); nc[ 4] = ClockSpinEnext1(co.front[ 8]); /* */ nc[ 5] = ClockSpinEnext1(co.front[ 1]); nc[ 6] = FnextEnext(nc[5]); nc[ 7] = ClockSpinEnext1(co.front[ 6]); /* */ nc[ 8] = ClockSpinEnext1(co.front[ 4]); } else if (order == 4){ nc[ 0] = ClockSpinEnext1(co.front[ 0]); nc[ 1] = FnextEnext(nc[ 0]); nc[ 2] = ClockSpinEnext1(co.front[ 3]); nc[ 3] = FnextEnext(nc[ 2]); nc[ 4] = ClockSpinEnext1(co.front[ 8]); nc[ 5] = FnextEnext(nc[ 4]); nc[ 6] = ClockSpinEnext1(co.front[15]); /* */ nc[ 7] = ClockSpinEnext1(co.front[ 1]); nc[ 8] = FnextEnext(nc[ 7]); nc[ 9] = ClockSpinEnext1(co.front[ 6]); nc[10] = FnextEnext(nc[ 9]); nc[11] = ClockSpinEnext1(co.front[13]); /* */ nc[12] = ClockSpinEnext1(co.front[ 4]); nc[13] = FnextEnext(nc[12]); nc[14] = ClockSpinEnext1(co.front[11]); /* */ nc[15] = ClockSpinEnext1(co.front[ 9]); } else if (order == 5){ nc[ 0] = ClockSpinEnext1(co.front[ 0]); nc[ 1] = FnextEnext(nc[ 0]); nc[ 2] = ClockSpinEnext1(co.front[ 3]); nc[ 3] = FnextEnext(nc[ 2]); nc[ 4] = ClockSpinEnext1(co.front[ 8]); nc[ 5] = FnextEnext(nc[ 4]); nc[ 6] = ClockSpinEnext1(co.front[15]); nc[ 7] = FnextEnext(nc[ 6]); nc[ 8] = ClockSpinEnext1(co.front[24]); /* */ nc[ 9] = ClockSpinEnext1(co.front[ 1]); nc[10] = FnextEnext(nc[ 9]); nc[11] = ClockSpinEnext1(co.front[ 6]); nc[12] = FnextEnext(nc[11]); nc[13] = ClockSpinEnext1(co.front[13]); nc[14] = FnextEnext(nc[13]); nc[15] = ClockSpinEnext1(co.front[22]); /* */ nc[16] = ClockSpinEnext1(co.front[ 4]); nc[17] = FnextEnext(nc[16]); nc[18] = ClockSpinEnext1(co.front[11]); nc[19] = FnextEnext(nc[18]); nc[20] = ClockSpinEnext1(co.front[20]); /* */ nc[21] = ClockSpinEnext1(co.front[ 9]); nc[22] = FnextEnext(nc[21]); nc[23] = ClockSpinEnext1(co.front[18]); /* */ nc[24] = ClockSpinEnext1(co.front[16]); } } if (cnum == 7) { if (order == 1) { nc[ 0] = ClockSpinEnext0(co.front[ 0]); } else if (order == 2){ nc[ 0] = ClockSpinEnext0(co.front[ 3]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = ClockSpinEnext0(co.front[ 1]); /* */ nc[ 3] = ClockSpinEnext0(co.front[ 0]); } else if (order == 3){ nc[ 0] = ClockSpinEnext0(co.front[ 8]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = ClockSpinEnext0(co.front[ 6]); nc[ 3] = FnextEnext(nc[2]); nc[ 4] = ClockSpinEnext0(co.front[ 4]); /* */ nc[ 5] = ClockSpinEnext0(co.front[ 3]); nc[ 6] = FnextEnext(nc[5]); nc[ 7] = ClockSpinEnext0(co.front[ 1]); /* */ nc[ 8] = ClockSpinEnext0(co.front[ 0]); } else if (order == 4){ nc[ 0] = ClockSpinEnext0(co.front[15]); nc[ 1] = FnextEnext(nc[ 0]); nc[ 2] = ClockSpinEnext0(co.front[13]); nc[ 3] = FnextEnext(nc[ 2]); nc[ 4] = ClockSpinEnext0(co.front[11]); nc[ 5] = FnextEnext(nc[ 4]); nc[ 6] = ClockSpinEnext0(co.front[ 9]); /* */ nc[ 7] = ClockSpinEnext0(co.front[ 8]); nc[ 8] = FnextEnext(nc[ 7]); nc[ 9] = ClockSpinEnext0(co.front[ 6]); nc[10] = FnextEnext(nc[ 9]); nc[11] = ClockSpinEnext0(co.front[ 4]); /* */ nc[12] = ClockSpinEnext0(co.front[ 3]); nc[13] = FnextEnext(nc[12]); nc[14] = ClockSpinEnext0(co.front[ 1]); /* */ nc[15] = ClockSpinEnext0(co.front[ 0]); } else if (order == 5){ nc[ 0] = ClockSpinEnext0(co.front[24]); nc[ 1] = FnextEnext(nc[ 0]); nc[ 2] = ClockSpinEnext0(co.front[22]); nc[ 3] = FnextEnext(nc[ 2]); nc[ 4] = ClockSpinEnext0(co.front[20]); nc[ 5] = FnextEnext(nc[ 4]); nc[ 6] = ClockSpinEnext0(co.front[18]); nc[ 7] = FnextEnext(nc[ 6]); nc[ 8] = ClockSpinEnext0(co.front[16]); /* */ nc[ 9] = ClockSpinEnext0(co.front[15]); nc[10] = FnextEnext(nc[ 9]); nc[11] = ClockSpinEnext0(co.front[13]); nc[12] = FnextEnext(nc[11]); nc[13] = ClockSpinEnext0(co.front[11]); nc[14] = FnextEnext(nc[13]); nc[15] = ClockSpinEnext0(co.front[ 9]); /* */ nc[16] = ClockSpinEnext0(co.front[ 8]); nc[17] = FnextEnext(nc[16]); nc[18] = ClockSpinEnext0(co.front[ 6]); nc[19] = FnextEnext(nc[18]); nc[20] = ClockSpinEnext0(co.front[ 4]); /* */ nc[21] = ClockSpinEnext0(co.front[ 3]); nc[22] = FnextEnext(nc[21]); nc[23] = ClockSpinEnext0(co.front[ 1]); /* */ nc[24] = ClockSpinEnext0(co.front[ 0]); } } if (cnum == 8) { if (order == 1) { nc[ 0] = ClockSpinNextE2(co.front[ 0]); } else if (order == 2){ nc[ 0] = ClockSpinNextE2(co.front[ 1]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = ClockSpinNextE2(co.front[ 0]); /* */ nc[ 3] = ClockSpinNextE2(co.front[ 3]); } else if (order == 3){ nc[ 0] = ClockSpinNextE2(co.front[ 4]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = ClockSpinNextE2(co.front[ 1]); nc[ 3] = FnextEnext(nc[2]); nc[ 4] = ClockSpinNextE2(co.front[ 0]); /* */ nc[ 5] = ClockSpinNextE2(co.front[ 6]); nc[ 6] = FnextEnext(nc[5]); nc[ 7] = ClockSpinNextE2(co.front[ 3]); /* */ nc[ 8] = ClockSpinNextE2(co.front[ 8]); } else if (order == 4){ nc[ 0] = ClockSpinNextE2(co.front[ 9]); nc[ 1] = FnextEnext(nc[ 0]); nc[ 2] = ClockSpinNextE2(co.front[ 4]); nc[ 3] = FnextEnext(nc[ 2]); nc[ 4] = ClockSpinNextE2(co.front[ 1]); nc[ 5] = FnextEnext(nc[ 4]); nc[ 6] = ClockSpinNextE2(co.front[ 0]); /* */ nc[ 7] = ClockSpinNextE2(co.front[11]); nc[ 8] = FnextEnext(nc[ 7]); nc[ 9] = ClockSpinNextE2(co.front[ 6]); nc[10] = FnextEnext(nc[ 9]); nc[11] = ClockSpinNextE2(co.front[ 3]); /* */ nc[12] = ClockSpinNextE2(co.front[13]); nc[13] = FnextEnext(nc[12]); nc[14] = ClockSpinNextE2(co.front[ 8]); /* */ nc[15] = ClockSpinNextE2(co.front[15]); } else if (order == 5){ nc[ 0] = ClockSpinNextE2(co.front[16]); nc[ 1] = FnextEnext(nc[ 0]); nc[ 2] = ClockSpinNextE2(co.front[ 9]); nc[ 3] = FnextEnext(nc[ 2]); nc[ 4] = ClockSpinNextE2(co.front[ 4]); nc[ 5] = FnextEnext(nc[ 4]); nc[ 6] = ClockSpinNextE2(co.front[ 1]); nc[ 7] = FnextEnext(nc[ 6]); nc[ 8] = ClockSpinNextE2(co.front[ 0]); /* */ nc[ 9] = ClockSpinNextE2(co.front[18]); nc[10] = FnextEnext(nc[ 9]); nc[11] = ClockSpinNextE2(co.front[11]); nc[12] = FnextEnext(nc[11]); nc[13] = ClockSpinNextE2(co.front[ 6]); nc[14] = FnextEnext(nc[13]); nc[15] = ClockSpinNextE2(co.front[ 3]); /* */ nc[16] = ClockSpinNextE2(co.front[20]); nc[17] = FnextEnext(nc[16]); nc[18] = ClockSpinNextE2(co.front[13]); nc[19] = FnextEnext(nc[18]); nc[20] = ClockSpinNextE2(co.front[ 8]); /* */ nc[21] = ClockSpinNextE2(co.front[22]); nc[22] = FnextEnext(nc[21]); nc[23] = ClockSpinNextE2(co.front[15]); /* */ nc[24] = ClockSpinNextE2(co.front[24]); } } if (cnum == 9) { if (order == 1) { nc[ 0] = Enext1(co.back[ 0]); } else if (order == 2){ nc[ 0] = Enext1(co.back[ 3]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = Enext1(co.back[ 0]); /* */ nc[ 3] = Enext1(co.back[ 1]); } else if (order == 3){ nc[ 0] = Enext1(co.back[ 8]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = Enext1(co.back[ 3]); nc[ 3] = FnextEnext(nc[2]); nc[ 4] = Enext1(co.back[ 0]); /* */ nc[ 5] = Enext1(co.back[ 6]); nc[ 6] = FnextEnext(nc[5]); nc[ 7] = Enext1(co.back[ 1]); /* */ nc[ 8] = Enext1(co.back[ 4]); } else if (order == 4){ nc[ 0] = Enext1(co.back[15]); nc[ 1] = FnextEnext(nc[ 0]); nc[ 2] = Enext1(co.back[ 8]); nc[ 3] = FnextEnext(nc[ 2]); nc[ 4] = Enext1(co.back[ 3]); nc[ 5] = FnextEnext(nc[ 4]); nc[ 6] = Enext1(co.back[ 0]); /* */ nc[ 7] = Enext1(co.back[13]); nc[ 8] = FnextEnext(nc[ 7]); nc[ 9] = Enext1(co.back[ 6]); nc[10] = FnextEnext(nc[ 9]); nc[11] = Enext1(co.back[ 1]); /* */ nc[12] = Enext1(co.back[11]); nc[13] = FnextEnext(nc[12]); nc[14] = Enext1(co.back[ 4]); /* */ nc[15] = Enext1(co.back[ 9]); } else if (order == 5){ nc[ 0] = Enext1(co.back[24]); nc[ 1] = FnextEnext(nc[ 0]); nc[ 2] = Enext1(co.back[15]); nc[ 3] = FnextEnext(nc[ 2]); nc[ 4] = Enext1(co.back[ 8]); nc[ 5] = FnextEnext(nc[ 4]); nc[ 6] = Enext1(co.back[ 3]); nc[ 7] = FnextEnext(nc[ 6]); nc[ 8] = Enext1(co.back[ 0]); /* */ nc[ 9] = Enext1(co.back[22]); nc[10] = FnextEnext(nc[ 9]); nc[11] = Enext1(co.back[13]); nc[12] = FnextEnext(nc[11]); nc[13] = Enext1(co.back[ 6]); nc[14] = FnextEnext(nc[13]); nc[15] = Enext1(co.back[ 1]); /* */ nc[16] = Enext1(co.back[20]); nc[17] = FnextEnext(nc[16]); nc[18] = Enext1(co.back[11]); nc[19] = FnextEnext(nc[18]); nc[20] = Enext1(co.back[ 4]); /* */ nc[21] = Enext1(co.back[18]); nc[22] = FnextEnext(nc[21]); nc[23] = Enext1(co.back[ 9]); /* */ nc[24] = Enext1(co.back[16]); } } if (cnum == 10) { if (order == 1) { nc[ 0] = NextE2(co.back[ 0]); } else if (order == 2){ nc[ 0] = NextE2(co.back[ 0]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = NextE2(co.back[ 1]); /* */ nc[ 3] = NextE2(co.back[ 3]); } else if (order == 3){ nc[ 0] = NextE2(co.back[ 0]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = NextE2(co.back[ 1]); nc[ 3] = FnextEnext(nc[2]); nc[ 4] = NextE2(co.back[ 4]); /* */ nc[ 5] = NextE2(co.back[ 3]); nc[ 6] = FnextEnext(nc[5]); nc[ 7] = NextE2(co.back[ 6]); /* */ nc[ 8] = NextE2(co.back[ 8]); } else if (order == 4){ nc[ 0] = NextE2(co.back[ 0]); nc[ 1] = FnextEnext(nc[ 0]); nc[ 2] = NextE2(co.back[ 1]); nc[ 3] = FnextEnext(nc[ 2]); nc[ 4] = NextE2(co.back[ 4]); nc[ 5] = FnextEnext(nc[ 4]); nc[ 6] = NextE2(co.back[ 9]); /* */ nc[ 7] = NextE2(co.back[ 3]); nc[ 8] = FnextEnext(nc[ 7]); nc[ 9] = NextE2(co.back[ 6]); nc[10] = FnextEnext(nc[ 9]); nc[11] = NextE2(co.back[11]); /* */ nc[12] = NextE2(co.back[ 8]); nc[13] = FnextEnext(nc[12]); nc[14] = NextE2(co.back[13]); /* */ nc[15] = NextE2(co.back[15]); } else if (order == 5){ nc[ 0] = NextE2(co.back[ 0]); nc[ 1] = FnextEnext(nc[ 0]); nc[ 2] = NextE2(co.back[ 1]); nc[ 3] = FnextEnext(nc[ 2]); nc[ 4] = NextE2(co.back[ 4]); nc[ 5] = FnextEnext(nc[ 4]); nc[ 6] = NextE2(co.back[ 9]); nc[ 7] = FnextEnext(nc[ 6]); nc[ 8] = NextE2(co.back[16]); /* */ nc[ 9] = NextE2(co.back[ 3]); nc[10] = FnextEnext(nc[ 9]); nc[11] = NextE2(co.back[ 6]); nc[12] = FnextEnext(nc[11]); nc[13] = NextE2(co.back[11]); nc[14] = FnextEnext(nc[13]); nc[15] = NextE2(co.back[18]); /* */ nc[16] = NextE2(co.back[ 8]); nc[17] = FnextEnext(nc[16]); nc[18] = NextE2(co.back[13]); nc[19] = FnextEnext(nc[18]); nc[20] = NextE2(co.back[20]); /* */ nc[21] = NextE2(co.back[15]); nc[22] = FnextEnext(nc[21]); nc[23] = NextE2(co.back[22]); /* */ nc[24] = NextE2(co.back[24]); } } if (cnum == 11) { if (order == 1) { nc[ 0] = Enext0(co.back[ 0]); } else if (order == 2){ nc[ 0] = Enext0(co.back[ 1]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = Enext0(co.back[ 3]); /* */ nc[ 3] = Enext0(co.back[ 0]); } else if (order == 3){ nc[ 0] = Enext0(co.back[ 4]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = Enext0(co.back[ 6]); nc[ 3] = FnextEnext(nc[2]); nc[ 4] = Enext0(co.back[ 8]); /* */ nc[ 5] = Enext0(co.back[ 1]); nc[ 6] = FnextEnext(nc[5]); nc[ 7] = Enext0(co.back[ 3]); /* */ nc[ 8] = Enext0(co.back[ 0]); } else if (order == 4){ nc[ 0] = Enext0(co.back[ 9]); nc[ 1] = FnextEnext(nc[ 0]); nc[ 2] = Enext0(co.back[11]); nc[ 3] = FnextEnext(nc[ 2]); nc[ 4] = Enext0(co.back[13]); nc[ 5] = FnextEnext(nc[ 4]); nc[ 6] = Enext0(co.back[15]); /* */ nc[ 7] = Enext0(co.back[ 4]); nc[ 8] = FnextEnext(nc[ 7]); nc[ 9] = Enext0(co.back[ 6]); nc[10] = FnextEnext(nc[ 9]); nc[11] = Enext0(co.back[ 8]); /* */ nc[12] = Enext0(co.back[ 1]); nc[13] = FnextEnext(nc[12]); nc[14] = Enext0(co.back[ 3]); /* */ nc[15] = Enext0(co.back[ 0]); } else if (order == 5){ nc[ 0] = Enext0(co.back[16]); nc[ 1] = FnextEnext(nc[ 0]); nc[ 2] = Enext0(co.back[18]); nc[ 3] = FnextEnext(nc[ 2]); nc[ 4] = Enext0(co.back[20]); nc[ 5] = FnextEnext(nc[ 4]); nc[ 6] = Enext0(co.back[22]); nc[ 7] = FnextEnext(nc[ 6]); nc[ 8] = Enext0(co.back[24]); /* */ nc[ 9] = Enext0(co.back[ 9]); nc[10] = FnextEnext(nc[ 9]); nc[11] = Enext0(co.back[11]); nc[12] = FnextEnext(nc[11]); nc[13] = Enext0(co.back[13]); nc[14] = FnextEnext(nc[13]); nc[15] = Enext0(co.back[15]); /* */ nc[16] = Enext0(co.back[ 4]); nc[17] = FnextEnext(nc[16]); nc[18] = Enext0(co.back[ 6]); nc[19] = FnextEnext(nc[18]); nc[20] = Enext0(co.back[ 8]); /* */ nc[21] = Enext0(co.back[ 1]); nc[22] = FnextEnext(nc[21]); nc[23] = Enext0(co.back[ 3]); /* */ nc[24] = Enext0(co.back[ 0]); } } if (cnum == 12) { if (order == 1) { nc[ 0] = ClockSpinEnext0(co.right[ 0]); } else if (order == 2){ nc[ 0] = ClockSpinEnext0(co.right[ 0]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = ClockSpinEnext0(co.right[ 1]); /* */ nc[ 3] = ClockSpinEnext0(co.right[ 3]); } else if (order == 3){ nc[ 0] = ClockSpinEnext0(co.right[ 0]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = ClockSpinEnext0(co.right[ 1]); nc[ 3] = FnextEnext(nc[2]); nc[ 4] = ClockSpinEnext0(co.right[ 4]); /* */ nc[ 5] = ClockSpinEnext0(co.right[ 3]); nc[ 6] = FnextEnext(nc[5]); nc[ 7] = ClockSpinEnext0(co.right[ 6]); /* */ nc[ 8] = ClockSpinEnext0(co.right[ 8]); } else if (order == 4){ nc[ 0] = ClockSpinEnext0(co.right[ 0]); nc[ 1] = FnextEnext(nc[ 0]); nc[ 2] = ClockSpinEnext0(co.right[ 1]); nc[ 3] = FnextEnext(nc[ 2]); nc[ 4] = ClockSpinEnext0(co.right[ 4]); nc[ 5] = FnextEnext(nc[ 4]); nc[ 6] = ClockSpinEnext0(co.right[ 9]); /* */ nc[ 7] = ClockSpinEnext0(co.right[ 3]); nc[ 8] = FnextEnext(nc[ 7]); nc[ 9] = ClockSpinEnext0(co.right[ 6]); nc[10] = FnextEnext(nc[ 9]); nc[11] = ClockSpinEnext0(co.right[11]); /* */ nc[12] = ClockSpinEnext0(co.right[ 8]); nc[13] = FnextEnext(nc[12]); nc[14] = ClockSpinEnext0(co.right[13]); /* */ nc[15] = ClockSpinEnext0(co.right[15]); } else if (order == 5){ nc[ 0] = ClockSpinEnext0(co.right[ 0]); nc[ 1] = FnextEnext(nc[ 0]); nc[ 2] = ClockSpinEnext0(co.right[ 1]); nc[ 3] = FnextEnext(nc[ 2]); nc[ 4] = ClockSpinEnext0(co.right[ 4]); nc[ 5] = FnextEnext(nc[ 4]); nc[ 6] = ClockSpinEnext0(co.right[ 9]); nc[ 7] = FnextEnext(nc[ 6]); nc[ 8] = ClockSpinEnext0(co.right[16]); /* */ nc[ 9] = ClockSpinEnext0(co.right[ 3]); nc[10] = FnextEnext(nc[ 9]); nc[11] = ClockSpinEnext0(co.right[ 6]); nc[12] = FnextEnext(nc[11]); nc[13] = ClockSpinEnext0(co.right[11]); nc[14] = FnextEnext(nc[13]); nc[15] = ClockSpinEnext0(co.right[18]); /* */ nc[16] = ClockSpinEnext0(co.right[ 8]); nc[17] = FnextEnext(nc[16]); nc[18] = ClockSpinEnext0(co.right[13]); nc[19] = FnextEnext(nc[18]); nc[20] = ClockSpinEnext0(co.right[20]); /* */ nc[21] = ClockSpinEnext0(co.right[15]); nc[22] = FnextEnext(nc[21]); nc[23] = ClockSpinEnext0(co.right[22]); /* */ nc[24] = ClockSpinEnext0(co.right[24]); } } if (cnum == 13) { if (order == 1) { nc[ 0] = ClockSpinEnext1(co.right[ 0]); } else if (order == 2){ nc[ 0] = ClockSpinEnext1(co.right[ 3]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = ClockSpinEnext1(co.right[ 0]); /* */ nc[ 3] = ClockSpinEnext1(co.right[ 1]); } else if (order == 3){ nc[ 0] = ClockSpinEnext1(co.right[ 8]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = ClockSpinEnext1(co.right[ 3]); nc[ 3] = FnextEnext(nc[2]); nc[ 4] = ClockSpinEnext1(co.right[ 0]); /* */ nc[ 5] = ClockSpinEnext1(co.right[ 6]); nc[ 6] = FnextEnext(nc[5]); nc[ 7] = ClockSpinEnext1(co.right[ 1]); /* */ nc[ 8] = ClockSpinEnext1(co.right[ 4]); } else if (order == 4){ nc[ 0] = ClockSpinEnext1(co.right[15]); nc[ 1] = FnextEnext(nc[ 0]); nc[ 2] = ClockSpinEnext1(co.right[ 8]); nc[ 3] = FnextEnext(nc[ 2]); nc[ 4] = ClockSpinEnext1(co.right[ 3]); nc[ 5] = FnextEnext(nc[ 4]); nc[ 6] = ClockSpinEnext1(co.right[ 0]); /* */ nc[ 7] = ClockSpinEnext1(co.right[13]); nc[ 8] = FnextEnext(nc[ 7]); nc[ 9] = ClockSpinEnext1(co.right[ 6]); nc[10] = FnextEnext(nc[ 9]); nc[11] = ClockSpinEnext1(co.right[ 1]); /* */ nc[12] = ClockSpinEnext1(co.right[11]); nc[13] = FnextEnext(nc[12]); nc[14] = ClockSpinEnext1(co.right[ 4]); /* */ nc[15] = ClockSpinEnext1(co.right[ 9]); } else if (order == 5){ nc[ 0] = ClockSpinEnext1(co.right[24]); nc[ 1] = FnextEnext(nc[ 0]); nc[ 2] = ClockSpinEnext1(co.right[15]); nc[ 3] = FnextEnext(nc[ 2]); nc[ 4] = ClockSpinEnext1(co.right[ 8]); nc[ 5] = FnextEnext(nc[ 4]); nc[ 6] = ClockSpinEnext1(co.right[ 3]); nc[ 7] = FnextEnext(nc[ 6]); nc[ 8] = ClockSpinEnext1(co.right[ 0]); /* */ nc[ 9] = ClockSpinEnext1(co.right[22]); nc[10] = FnextEnext(nc[ 9]); nc[11] = ClockSpinEnext1(co.right[13]); nc[12] = FnextEnext(nc[11]); nc[13] = ClockSpinEnext1(co.right[ 6]); nc[14] = FnextEnext(nc[13]); nc[15] = ClockSpinEnext1(co.right[ 1]); /* */ nc[16] = ClockSpinEnext1(co.right[20]); nc[17] = FnextEnext(nc[16]); nc[18] = ClockSpinEnext1(co.right[11]); nc[19] = FnextEnext(nc[18]); nc[20] = ClockSpinEnext1(co.right[ 4]); /* */ nc[21] = ClockSpinEnext1(co.right[18]); nc[22] = FnextEnext(nc[21]); nc[23] = ClockSpinEnext1(co.right[ 9]); /* */ nc[24] = ClockSpinEnext1(co.right[16]); } } if (cnum == 14) { if (order == 1) { nc[ 0] = ClockSpinNextE2(co.right[ 0]); } else if (order == 2){ nc[ 0] = ClockSpinNextE2(co.right[ 1]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = ClockSpinNextE2(co.right[ 3]); /* */ nc[ 3] = ClockSpinNextE2(co.right[ 0]); } else if (order == 3){ nc[ 0] = ClockSpinNextE2(co.right[ 4]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = ClockSpinNextE2(co.right[ 6]); nc[ 3] = FnextEnext(nc[2]); nc[ 4] = ClockSpinNextE2(co.right[ 8]); /* */ nc[ 5] = ClockSpinNextE2(co.right[ 1]); nc[ 6] = FnextEnext(nc[5]); nc[ 7] = ClockSpinNextE2(co.right[ 3]); /* */ nc[ 8] = ClockSpinNextE2(co.right[ 0]); } else if (order == 4){ nc[ 0] = ClockSpinNextE2(co.right[ 9]); nc[ 1] = FnextEnext(nc[ 0]); nc[ 2] = ClockSpinNextE2(co.right[11]); nc[ 3] = FnextEnext(nc[ 2]); nc[ 4] = ClockSpinNextE2(co.right[13]); nc[ 5] = FnextEnext(nc[ 4]); nc[ 6] = ClockSpinNextE2(co.right[15]); /* */ nc[ 7] = ClockSpinNextE2(co.right[ 4]); nc[ 8] = FnextEnext(nc[ 7]); nc[ 9] = ClockSpinNextE2(co.right[ 6]); nc[10] = FnextEnext(nc[ 9]); nc[11] = ClockSpinNextE2(co.right[ 8]); /* */ nc[12] = ClockSpinNextE2(co.right[ 1]); nc[13] = FnextEnext(nc[12]); nc[14] = ClockSpinNextE2(co.right[ 3]); /* */ nc[15] = ClockSpinNextE2(co.right[ 0]); } else if (order == 5){ nc[ 0] = ClockSpinNextE2(co.right[16]); nc[ 1] = FnextEnext(nc[ 0]); nc[ 2] = ClockSpinNextE2(co.right[18]); nc[ 3] = FnextEnext(nc[ 2]); nc[ 4] = ClockSpinNextE2(co.right[20]); nc[ 5] = FnextEnext(nc[ 4]); nc[ 6] = ClockSpinNextE2(co.right[22]); nc[ 7] = FnextEnext(nc[ 6]); nc[ 8] = ClockSpinNextE2(co.right[24]); /* */ nc[ 9] = ClockSpinNextE2(co.right[ 9]); nc[10] = FnextEnext(nc[ 9]); nc[11] = ClockSpinNextE2(co.right[11]); nc[12] = FnextEnext(nc[11]); nc[13] = ClockSpinNextE2(co.right[13]); nc[14] = FnextEnext(nc[13]); nc[15] = ClockSpinNextE2(co.right[15]); /* */ nc[16] = ClockSpinNextE2(co.right[ 4]); nc[17] = FnextEnext(nc[16]); nc[18] = ClockSpinNextE2(co.right[ 6]); nc[19] = FnextEnext(nc[18]); nc[20] = ClockSpinNextE2(co.right[ 8]); /* */ nc[21] = ClockSpinNextE2(co.right[ 1]); nc[22] = FnextEnext(nc[21]); nc[23] = ClockSpinNextE2(co.right[ 3]); /* */ nc[24] = ClockSpinNextE2(co.right[ 0]); } } if (cnum == 15) { if (order == 1) { nc[ 0] = ClockSpinEnext0(co.left[ 0]); } else if (order == 2){ nc[ 0] = ClockSpinEnext0(co.left[ 0]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = ClockSpinEnext0(co.left[ 1]); /* */ nc[ 3] = ClockSpinEnext0(co.left[ 3]); } else if (order == 3){ nc[ 0] = ClockSpinEnext0(co.left[ 0]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = ClockSpinEnext0(co.left[ 1]); nc[ 3] = FnextEnext(nc[2]); nc[ 4] = ClockSpinEnext0(co.left[ 4]); /* */ nc[ 5] = ClockSpinEnext0(co.left[ 3]); nc[ 6] = FnextEnext(nc[5]); nc[ 7] = ClockSpinEnext0(co.left[ 6]); /* */ nc[ 8] = ClockSpinEnext0(co.left[ 8]); } else if (order == 4){ nc[ 0] = ClockSpinEnext0(co.left[ 0]); nc[ 1] = FnextEnext(nc[ 0]); nc[ 2] = ClockSpinEnext0(co.left[ 1]); nc[ 3] = FnextEnext(nc[ 2]); nc[ 4] = ClockSpinEnext0(co.left[ 4]); nc[ 5] = FnextEnext(nc[ 4]); nc[ 6] = ClockSpinEnext0(co.left[ 9]); /* */ nc[ 7] = ClockSpinEnext0(co.left[ 3]); nc[ 8] = FnextEnext(nc[ 7]); nc[ 9] = ClockSpinEnext0(co.left[ 6]); nc[10] = FnextEnext(nc[ 9]); nc[11] = ClockSpinEnext0(co.left[11]); /* */ nc[12] = ClockSpinEnext0(co.left[ 8]); nc[13] = FnextEnext(nc[12]); nc[14] = ClockSpinEnext0(co.left[13]); /* */ nc[15] = ClockSpinEnext0(co.left[15]); } else if (order == 5){ nc[ 0] = ClockSpinEnext0(co.left[ 0]); nc[ 1] = FnextEnext(nc[ 0]); nc[ 2] = ClockSpinEnext0(co.left[ 1]); nc[ 3] = FnextEnext(nc[ 2]); nc[ 4] = ClockSpinEnext0(co.left[ 4]); nc[ 5] = FnextEnext(nc[ 4]); nc[ 6] = ClockSpinEnext0(co.left[ 9]); nc[ 7] = FnextEnext(nc[ 6]); nc[ 8] = ClockSpinEnext0(co.left[16]); /* */ nc[ 9] = ClockSpinEnext0(co.left[ 3]); nc[10] = FnextEnext(nc[ 9]); nc[11] = ClockSpinEnext0(co.left[ 6]); nc[12] = FnextEnext(nc[11]); nc[13] = ClockSpinEnext0(co.left[11]); nc[14] = FnextEnext(nc[13]); nc[15] = ClockSpinEnext0(co.left[18]); /* */ nc[16] = ClockSpinEnext0(co.left[ 8]); nc[17] = FnextEnext(nc[16]); nc[18] = ClockSpinEnext0(co.left[13]); nc[19] = FnextEnext(nc[18]); nc[20] = ClockSpinEnext0(co.left[20]); /* */ nc[21] = ClockSpinEnext0(co.left[15]); nc[22] = FnextEnext(nc[21]); nc[23] = ClockSpinEnext0(co.left[22]); /* */ nc[24] = ClockSpinEnext0(co.left[24]); } } if (cnum == 16) { if (order == 1) { nc[ 0] = ClockSpinEnext1(co.left[ 0]); } else if (order == 2){ nc[ 0] = ClockSpinEnext1(co.left[ 3]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = ClockSpinEnext1(co.left[ 0]); /* */ nc[ 3] = ClockSpinEnext1(co.left[ 1]); } else if (order == 3){ nc[ 0] = ClockSpinEnext1(co.left[ 8]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = ClockSpinEnext1(co.left[ 3]); nc[ 3] = FnextEnext(nc[2]); nc[ 4] = ClockSpinEnext1(co.left[ 0]); /* */ nc[ 5] = ClockSpinEnext1(co.left[ 6]); nc[ 6] = FnextEnext(nc[5]); nc[ 7] = ClockSpinEnext1(co.left[ 1]); /* */ nc[ 8] = ClockSpinEnext1(co.left[ 4]); } else if (order == 4){ nc[ 0] = ClockSpinEnext1(co.left[15]); nc[ 1] = FnextEnext(nc[ 0]); nc[ 2] = ClockSpinEnext1(co.left[ 8]); nc[ 3] = FnextEnext(nc[ 2]); nc[ 4] = ClockSpinEnext1(co.left[ 3]); nc[ 5] = FnextEnext(nc[ 4]); nc[ 6] = ClockSpinEnext1(co.left[ 0]); /* */ nc[ 7] = ClockSpinEnext1(co.left[13]); nc[ 8] = FnextEnext(nc[ 7]); nc[ 9] = ClockSpinEnext1(co.left[ 6]); nc[10] = FnextEnext(nc[ 9]); nc[11] = ClockSpinEnext1(co.left[ 1]); /* */ nc[12] = ClockSpinEnext1(co.left[11]); nc[13] = FnextEnext(nc[12]); nc[14] = ClockSpinEnext1(co.left[ 4]); /* */ nc[15] = ClockSpinEnext1(co.left[ 9]); } else if (order == 5){ nc[ 0] = ClockSpinEnext1(co.left[24]); nc[ 1] = FnextEnext(nc[ 0]); nc[ 2] = ClockSpinEnext1(co.left[15]); nc[ 3] = FnextEnext(nc[ 2]); nc[ 4] = ClockSpinEnext1(co.left[ 8]); nc[ 5] = FnextEnext(nc[ 4]); nc[ 6] = ClockSpinEnext1(co.left[ 3]); nc[ 7] = FnextEnext(nc[ 6]); nc[ 8] = ClockSpinEnext1(co.left[ 0]); /* */ nc[ 9] = ClockSpinEnext1(co.left[22]); nc[10] = FnextEnext(nc[ 9]); nc[11] = ClockSpinEnext1(co.left[13]); nc[12] = FnextEnext(nc[11]); nc[13] = ClockSpinEnext1(co.left[ 6]); nc[14] = FnextEnext(nc[13]); nc[15] = ClockSpinEnext1(co.left[ 1]); /* */ nc[16] = ClockSpinEnext1(co.left[20]); nc[17] = FnextEnext(nc[16]); nc[18] = ClockSpinEnext1(co.left[11]); nc[19] = FnextEnext(nc[18]); nc[20] = ClockSpinEnext1(co.left[ 4]); /* */ nc[21] = ClockSpinEnext1(co.left[18]); nc[22] = FnextEnext(nc[21]); nc[23] = ClockSpinEnext1(co.left[ 9]); /* */ nc[24] = ClockSpinEnext1(co.left[16]); } } if (cnum == 17) { if (order == 1) { nc[ 0] = ClockSpinNextE2(co.left[ 0]); } else if (order == 2){ nc[ 0] = ClockSpinNextE2(co.left[ 1]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = ClockSpinNextE2(co.left[ 3]); /* */ nc[ 3] = ClockSpinNextE2(co.left[ 0]); } else if (order == 3){ nc[ 0] = ClockSpinNextE2(co.left[ 4]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = ClockSpinNextE2(co.left[ 6]); nc[ 3] = FnextEnext(nc[2]); nc[ 4] = ClockSpinNextE2(co.left[ 8]); /* */ nc[ 5] = ClockSpinNextE2(co.left[ 1]); nc[ 6] = FnextEnext(nc[5]); nc[ 7] = ClockSpinNextE2(co.left[ 3]); /* */ nc[ 8] = ClockSpinNextE2(co.left[ 0]); } else if (order == 4){ nc[ 0] = ClockSpinNextE2(co.left[ 9]); nc[ 1] = FnextEnext(nc[ 0]); nc[ 2] = ClockSpinNextE2(co.left[11]); nc[ 3] = FnextEnext(nc[ 2]); nc[ 4] = ClockSpinNextE2(co.left[13]); nc[ 5] = FnextEnext(nc[ 4]); nc[ 6] = ClockSpinNextE2(co.left[15]); /* */ nc[ 7] = ClockSpinNextE2(co.left[ 4]); nc[ 8] = FnextEnext(nc[ 7]); nc[ 9] = ClockSpinNextE2(co.left[ 6]); nc[10] = FnextEnext(nc[ 9]); nc[11] = ClockSpinNextE2(co.left[ 8]); /* */ nc[12] = ClockSpinNextE2(co.left[ 1]); nc[13] = FnextEnext(nc[12]); nc[14] = ClockSpinNextE2(co.left[ 3]); /* */ nc[15] = ClockSpinNextE2(co.left[ 0]); } else if (order == 5){ nc[ 0] = ClockSpinNextE2(co.left[16]); nc[ 1] = FnextEnext(nc[ 0]); nc[ 2] = ClockSpinNextE2(co.left[18]); nc[ 3] = FnextEnext(nc[ 2]); nc[ 4] = ClockSpinNextE2(co.left[20]); nc[ 5] = FnextEnext(nc[ 4]); nc[ 6] = ClockSpinNextE2(co.left[22]); nc[ 7] = FnextEnext(nc[ 6]); nc[ 8] = ClockSpinNextE2(co.left[24]); /* */ nc[ 9] = ClockSpinNextE2(co.left[ 9]); nc[10] = FnextEnext(nc[ 9]); nc[11] = ClockSpinNextE2(co.left[11]); nc[12] = FnextEnext(nc[11]); nc[13] = ClockSpinNextE2(co.left[13]); nc[14] = FnextEnext(nc[13]); nc[15] = ClockSpinNextE2(co.left[15]); /* */ nc[16] = ClockSpinNextE2(co.left[ 4]); nc[17] = FnextEnext(nc[16]); nc[18] = ClockSpinNextE2(co.left[ 6]); nc[19] = FnextEnext(nc[18]); nc[20] = ClockSpinNextE2(co.left[ 8]); /* */ nc[21] = ClockSpinNextE2(co.left[ 1]); nc[22] = FnextEnext(nc[21]); nc[23] = ClockSpinNextE2(co.left[ 3]); /* */ nc[24] = ClockSpinNextE2(co.left[ 0]); } } if (cnum == 18) { if (order == 1) { nc[ 0] = Enext1(co.front[ 0]); } else if (order == 2){ nc[ 0] = Enext1(co.front[ 3]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = Enext1(co.front[ 0]); /* */ nc[ 3] = Enext1(co.front[ 1]); } else if (order == 3){ nc[ 0] = Enext1(co.front[ 8]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = Enext1(co.front[ 3]); nc[ 3] = FnextEnext(nc[2]); nc[ 4] = Enext1(co.front[ 0]); /* */ nc[ 5] = Enext1(co.front[ 6]); nc[ 6] = FnextEnext(nc[5]); nc[ 7] = Enext1(co.front[ 1]); /* */ nc[ 8] = Enext1(co.front[ 4]); } else if (order == 4){ nc[ 0] = Enext1(co.front[15]); nc[ 1] = FnextEnext(nc[ 0]); nc[ 2] = Enext1(co.front[ 8]); nc[ 3] = FnextEnext(nc[ 2]); nc[ 4] = Enext1(co.front[ 3]); nc[ 5] = FnextEnext(nc[ 4]); nc[ 6] = Enext1(co.front[ 0]); /* */ nc[ 7] = Enext1(co.front[13]); nc[ 8] = FnextEnext(nc[ 7]); nc[ 9] = Enext1(co.front[ 6]); nc[10] = FnextEnext(nc[ 9]); nc[11] = Enext1(co.front[ 1]); /* */ nc[12] = Enext1(co.front[11]); nc[13] = FnextEnext(nc[12]); nc[14] = Enext1(co.front[ 4]); /* */ nc[15] = Enext1(co.front[ 9]); } else if (order == 5){ nc[ 0] = Enext1(co.front[24]); nc[ 1] = FnextEnext(nc[ 0]); nc[ 2] = Enext1(co.front[15]); nc[ 3] = FnextEnext(nc[ 2]); nc[ 4] = Enext1(co.front[ 8]); nc[ 5] = FnextEnext(nc[ 4]); nc[ 6] = Enext1(co.front[ 3]); nc[ 7] = FnextEnext(nc[ 6]); nc[ 8] = Enext1(co.front[ 0]); /* */ nc[ 9] = Enext1(co.front[22]); nc[10] = FnextEnext(nc[ 9]); nc[11] = Enext1(co.front[13]); nc[12] = FnextEnext(nc[11]); nc[13] = Enext1(co.front[ 6]); nc[14] = FnextEnext(nc[13]); nc[15] = Enext1(co.front[ 1]); /* */ nc[16] = Enext1(co.front[20]); nc[17] = FnextEnext(nc[16]); nc[18] = Enext1(co.front[11]); nc[19] = FnextEnext(nc[18]); nc[20] = Enext1(co.front[ 4]); /* */ nc[21] = Enext1(co.front[18]); nc[22] = FnextEnext(nc[21]); nc[23] = Enext1(co.front[ 9]); /* */ nc[24] = Enext1(co.front[16]); } } if (cnum == 19) { if (order == 1) { nc[ 0] = Enext0(co.front[ 0]); } else if (order == 2){ nc[ 0] = Enext0(co.front[ 1]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = Enext0(co.front[ 3]); /* */ nc[ 3] = Enext0(co.front[ 0]); } else if (order == 3){ nc[ 0] = Enext0(co.front[ 4]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = Enext0(co.front[ 6]); nc[ 3] = FnextEnext(nc[2]); nc[ 4] = Enext0(co.front[ 8]); /* */ nc[ 5] = Enext0(co.front[ 1]); nc[ 6] = FnextEnext(nc[5]); nc[ 7] = Enext0(co.front[ 3]); /* */ nc[ 8] = Enext0(co.front[ 0]); } else if (order == 4){ nc[ 0] = Enext0(co.front[ 9]); nc[ 1] = FnextEnext(nc[ 0]); nc[ 2] = Enext0(co.front[11]); nc[ 3] = FnextEnext(nc[ 2]); nc[ 4] = Enext0(co.front[13]); nc[ 5] = FnextEnext(nc[ 4]); nc[ 6] = Enext0(co.front[15]); /* */ nc[ 7] = Enext0(co.front[ 4]); nc[ 8] = FnextEnext(nc[ 7]); nc[ 9] = Enext0(co.front[ 6]); nc[10] = FnextEnext(nc[ 9]); nc[11] = Enext0(co.front[ 8]); /* */ nc[12] = Enext0(co.front[ 1]); nc[13] = FnextEnext(nc[12]); nc[14] = Enext0(co.front[ 3]); /* */ nc[15] = Enext0(co.front[ 0]); } else if (order == 5){ nc[ 0] = Enext0(co.front[16]); nc[ 1] = FnextEnext(nc[ 0]); nc[ 2] = Enext0(co.front[18]); nc[ 3] = FnextEnext(nc[ 2]); nc[ 4] = Enext0(co.front[20]); nc[ 5] = FnextEnext(nc[ 4]); nc[ 6] = Enext0(co.front[22]); nc[ 7] = FnextEnext(nc[ 6]); nc[ 8] = Enext0(co.front[24]); /* */ nc[ 9] = Enext0(co.front[ 9]); nc[10] = FnextEnext(nc[ 9]); nc[11] = Enext0(co.front[11]); nc[12] = FnextEnext(nc[11]); nc[13] = Enext0(co.front[13]); nc[14] = FnextEnext(nc[13]); nc[15] = Enext0(co.front[15]); /* */ nc[16] = Enext0(co.front[ 4]); nc[17] = FnextEnext(nc[16]); nc[18] = Enext0(co.front[ 6]); nc[19] = FnextEnext(nc[18]); nc[20] = Enext0(co.front[ 8]); /* */ nc[21] = Enext0(co.front[ 1]); nc[22] = FnextEnext(nc[21]); nc[23] = Enext0(co.front[ 3]); /* */ nc[24] = Enext0(co.front[ 0]); } } if (cnum == 20) { if (order == 1) { nc[ 0] = NextE2(co.front[ 0]); } else if (order == 2){ nc[ 0] = NextE2(co.front[ 0]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = NextE2(co.front[ 1]); /* */ nc[ 3] = NextE2(co.front[ 3]); } else if (order == 3){ nc[ 0] = NextE2(co.front[ 0]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = NextE2(co.front[ 1]); nc[ 3] = FnextEnext(nc[2]); nc[ 4] = NextE2(co.front[ 4]); /* */ nc[ 5] = NextE2(co.front[ 3]); nc[ 6] = FnextEnext(nc[5]); nc[ 7] = NextE2(co.front[ 6]); /* */ nc[ 8] = NextE2(co.front[ 8]); } else if (order == 4){ nc[ 0] = NextE2(co.front[ 0]); nc[ 1] = FnextEnext(nc[ 0]); nc[ 2] = NextE2(co.front[ 1]); nc[ 3] = FnextEnext(nc[ 2]); nc[ 4] = NextE2(co.front[ 4]); nc[ 5] = FnextEnext(nc[ 4]); nc[ 6] = NextE2(co.front[ 9]); /* */ nc[ 7] = NextE2(co.front[ 3]); nc[ 8] = FnextEnext(nc[ 7]); nc[ 9] = NextE2(co.front[ 6]); nc[10] = FnextEnext(nc[ 9]); nc[11] = NextE2(co.front[11]); /* */ nc[12] = NextE2(co.front[ 8]); nc[13] = FnextEnext(nc[12]); nc[14] = NextE2(co.front[13]); /* */ nc[15] = NextE2(co.front[15]); } else if (order == 5){ nc[ 0] = NextE2(co.front[ 0]); nc[ 1] = FnextEnext(nc[ 0]); nc[ 2] = NextE2(co.front[ 1]); nc[ 3] = FnextEnext(nc[ 2]); nc[ 4] = NextE2(co.front[ 4]); nc[ 5] = FnextEnext(nc[ 4]); nc[ 6] = NextE2(co.front[ 9]); nc[ 7] = FnextEnext(nc[ 6]); nc[ 8] = NextE2(co.front[16]); /* */ nc[ 9] = NextE2(co.front[ 3]); nc[10] = FnextEnext(nc[ 9]); nc[11] = NextE2(co.front[ 6]); nc[12] = FnextEnext(nc[11]); nc[13] = NextE2(co.front[11]); nc[14] = FnextEnext(nc[13]); nc[15] = NextE2(co.front[18]); /* */ nc[16] = NextE2(co.front[ 8]); nc[17] = FnextEnext(nc[16]); nc[18] = NextE2(co.front[13]); nc[19] = FnextEnext(nc[18]); nc[20] = NextE2(co.front[20]); /* */ nc[21] = NextE2(co.front[15]); nc[22] = FnextEnext(nc[21]); nc[23] = NextE2(co.front[22]); /* */ nc[24] = NextE2(co.front[24]); } } if (cnum == 21) { if (order == 1) { nc[ 0] = ClockSpinEnext1(co.back[ 0]); } else if (order == 2){ nc[ 0] = ClockSpinEnext1(co.back[ 0]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = ClockSpinEnext1(co.back[ 3]); /* */ nc[ 3] = ClockSpinEnext1(co.back[ 1]); } else if (order == 3){ nc[ 0] = ClockSpinEnext1(co.back[ 0]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = ClockSpinEnext1(co.back[ 3]); nc[ 3] = FnextEnext(nc[2]); nc[ 4] = ClockSpinEnext1(co.back[ 8]); /* */ nc[ 5] = ClockSpinEnext1(co.back[ 1]); nc[ 6] = FnextEnext(nc[5]); nc[ 7] = ClockSpinEnext1(co.back[ 6]); /* */ nc[ 8] = ClockSpinEnext1(co.back[ 4]); } else if (order == 4){ nc[ 0] = ClockSpinEnext1(co.back[ 0]); nc[ 1] = FnextEnext(nc[ 0]); nc[ 2] = ClockSpinEnext1(co.back[ 3]); nc[ 3] = FnextEnext(nc[ 2]); nc[ 4] = ClockSpinEnext1(co.back[ 8]); nc[ 5] = FnextEnext(nc[ 4]); nc[ 6] = ClockSpinEnext1(co.back[15]); /* */ nc[ 7] = ClockSpinEnext1(co.back[ 1]); nc[ 8] = FnextEnext(nc[ 7]); nc[ 9] = ClockSpinEnext1(co.back[ 6]); nc[10] = FnextEnext(nc[ 9]); nc[11] = ClockSpinEnext1(co.back[13]); /* */ nc[12] = ClockSpinEnext1(co.back[ 4]); nc[13] = FnextEnext(nc[12]); nc[14] = ClockSpinEnext1(co.back[11]); /* */ nc[15] = ClockSpinEnext1(co.back[ 9]); } else if (order == 5){ nc[ 0] = ClockSpinEnext1(co.back[ 0]); nc[ 1] = FnextEnext(nc[ 0]); nc[ 2] = ClockSpinEnext1(co.back[ 3]); nc[ 3] = FnextEnext(nc[ 2]); nc[ 4] = ClockSpinEnext1(co.back[ 8]); nc[ 5] = FnextEnext(nc[ 4]); nc[ 6] = ClockSpinEnext1(co.back[15]); nc[ 7] = FnextEnext(nc[ 6]); nc[ 8] = ClockSpinEnext1(co.back[24]); /* */ nc[ 9] = ClockSpinEnext1(co.back[ 1]); nc[10] = FnextEnext(nc[ 9]); nc[11] = ClockSpinEnext1(co.back[ 6]); nc[12] = FnextEnext(nc[11]); nc[13] = ClockSpinEnext1(co.back[13]); nc[14] = FnextEnext(nc[13]); nc[15] = ClockSpinEnext1(co.back[22]); /* */ nc[16] = ClockSpinEnext1(co.back[ 4]); nc[17] = FnextEnext(nc[16]); nc[18] = ClockSpinEnext1(co.back[11]); nc[19] = FnextEnext(nc[18]); nc[20] = ClockSpinEnext1(co.back[20]); /* */ nc[21] = ClockSpinEnext1(co.back[ 9]); nc[22] = FnextEnext(nc[21]); nc[23] = ClockSpinEnext1(co.back[18]); /* */ nc[24] = ClockSpinEnext1(co.back[16]); } } if (cnum == 22) { if (order == 1) { nc[ 0] = ClockSpinNextE2(co.back[ 0]); } else if (order == 2){ nc[ 0] = ClockSpinNextE2(co.back[ 1]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = ClockSpinNextE2(co.back[ 0]); /* */ nc[ 3] = ClockSpinNextE2(co.back[ 3]); } else if (order == 3){ nc[ 0] = ClockSpinNextE2(co.back[ 4]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = ClockSpinNextE2(co.back[ 1]); nc[ 3] = FnextEnext(nc[2]); nc[ 4] = ClockSpinNextE2(co.back[ 0]); /* */ nc[ 5] = ClockSpinNextE2(co.back[ 6]); nc[ 6] = FnextEnext(nc[5]); nc[ 7] = ClockSpinNextE2(co.back[ 3]); /* */ nc[ 8] = ClockSpinNextE2(co.back[ 8]); } else if (order == 4){ nc[ 0] = ClockSpinNextE2(co.back[ 9]); nc[ 1] = FnextEnext(nc[ 0]); nc[ 2] = ClockSpinNextE2(co.back[ 4]); nc[ 3] = FnextEnext(nc[ 2]); nc[ 4] = ClockSpinNextE2(co.back[ 1]); nc[ 5] = FnextEnext(nc[ 4]); nc[ 6] = ClockSpinNextE2(co.back[ 0]); /* */ nc[ 7] = ClockSpinNextE2(co.back[11]); nc[ 8] = FnextEnext(nc[ 7]); nc[ 9] = ClockSpinNextE2(co.back[ 6]); nc[10] = FnextEnext(nc[ 9]); nc[11] = ClockSpinNextE2(co.back[ 3]); /* */ nc[12] = ClockSpinNextE2(co.back[13]); nc[13] = FnextEnext(nc[12]); nc[14] = ClockSpinNextE2(co.back[ 8]); /* */ nc[15] = ClockSpinNextE2(co.back[15]); } else if (order == 5){ nc[ 0] = ClockSpinNextE2(co.back[16]); nc[ 1] = FnextEnext(nc[ 0]); nc[ 2] = ClockSpinNextE2(co.back[ 9]); nc[ 3] = FnextEnext(nc[ 2]); nc[ 4] = ClockSpinNextE2(co.back[ 4]); nc[ 5] = FnextEnext(nc[ 4]); nc[ 6] = ClockSpinNextE2(co.back[ 1]); nc[ 7] = FnextEnext(nc[ 6]); nc[ 8] = ClockSpinNextE2(co.back[ 0]); /* */ nc[ 9] = ClockSpinNextE2(co.back[18]); nc[10] = FnextEnext(nc[ 9]); nc[11] = ClockSpinNextE2(co.back[11]); nc[12] = FnextEnext(nc[11]); nc[13] = ClockSpinNextE2(co.back[ 6]); nc[14] = FnextEnext(nc[13]); nc[15] = ClockSpinNextE2(co.back[ 3]); /* */ nc[16] = ClockSpinNextE2(co.back[20]); nc[17] = FnextEnext(nc[16]); nc[18] = ClockSpinNextE2(co.back[13]); nc[19] = FnextEnext(nc[18]); nc[20] = ClockSpinNextE2(co.back[ 8]); /* */ nc[21] = ClockSpinNextE2(co.back[22]); nc[22] = FnextEnext(nc[21]); nc[23] = ClockSpinNextE2(co.back[15]); /* */ nc[24] = ClockSpinNextE2(co.back[24]); } } if (cnum == 23) { if (order == 1) { nc[ 0] = ClockSpinEnext0(co.back[ 0]); } else if (order == 2){ nc[ 0] = ClockSpinEnext0(co.back[ 3]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = ClockSpinEnext0(co.back[ 1]); /* */ nc[ 3] = ClockSpinEnext0(co.back[ 0]); } else if (order == 3){ nc[ 0] = ClockSpinEnext0(co.back[ 8]); nc[ 1] = FnextEnext(nc[0]); nc[ 2] = ClockSpinEnext0(co.back[ 6]); nc[ 3] = FnextEnext(nc[2]); nc[ 4] = ClockSpinEnext0(co.back[ 4]); /* */ nc[ 5] = ClockSpinEnext0(co.back[ 3]); nc[ 6] = FnextEnext(nc[5]); nc[ 7] = ClockSpinEnext0(co.back[ 1]); /* */ nc[ 8] = ClockSpinEnext0(co.back[ 0]); } else if (order == 4){ nc[ 0] = ClockSpinEnext0(co.back[15]); nc[ 1] = FnextEnext(nc[ 0]); nc[ 2] = ClockSpinEnext0(co.back[13]); nc[ 3] = FnextEnext(nc[ 2]); nc[ 4] = ClockSpinEnext0(co.back[11]); nc[ 5] = FnextEnext(nc[ 4]); nc[ 6] = ClockSpinEnext0(co.back[ 9]); /* */ nc[ 7] = ClockSpinEnext0(co.back[ 8]); nc[ 8] = FnextEnext(nc[ 7]); nc[ 9] = ClockSpinEnext0(co.back[ 6]); nc[10] = FnextEnext(nc[ 9]); nc[11] = ClockSpinEnext0(co.back[ 4]); /* */ nc[12] = ClockSpinEnext0(co.back[ 3]); nc[13] = FnextEnext(nc[12]); nc[14] = ClockSpinEnext0(co.back[ 1]); /* */ nc[15] = ClockSpinEnext0(co.back[ 0]); } else if (order == 5){ nc[ 0] = ClockSpinEnext0(co.back[24]); nc[ 1] = FnextEnext(nc[ 0]); nc[ 2] = ClockSpinEnext0(co.back[22]); nc[ 3] = FnextEnext(nc[ 2]); nc[ 4] = ClockSpinEnext0(co.back[20]); nc[ 5] = FnextEnext(nc[ 4]); nc[ 6] = ClockSpinEnext0(co.back[18]); nc[ 7] = FnextEnext(nc[ 6]); nc[ 8] = ClockSpinEnext0(co.back[16]); /* */ nc[ 9] = ClockSpinEnext0(co.back[15]); nc[10] = FnextEnext(nc[ 9]); nc[11] = ClockSpinEnext0(co.back[13]); nc[12] = FnextEnext(nc[11]); nc[13] = ClockSpinEnext0(co.back[11]); nc[14] = FnextEnext(nc[13]); nc[15] = ClockSpinEnext0(co.back[ 9]); /* */ nc[16] = ClockSpinEnext0(co.back[ 8]); nc[17] = FnextEnext(nc[16]); nc[18] = ClockSpinEnext0(co.back[ 6]); nc[19] = FnextEnext(nc[18]); nc[20] = ClockSpinEnext0(co.back[ 4]); /* */ nc[21] = ClockSpinEnext0(co.back[ 3]); nc[22] = FnextEnext(nc[21]); nc[23] = ClockSpinEnext0(co.back[ 1]); /* */ nc[24] = ClockSpinEnext0(co.back[ 0]); } } return nc; } /* END Place_tsOnFrontier */ Place_t MakeMaximalGlue(uint order) { if (order == 1) { ??? ca = MakeTetra1(); ??? cb = MakeTetra1(); Glue(Spin(cb.left[0]), ca.right[0], 1); Glue(Spin(cb.front[0]), ca.back[0], 1); return cb.front[0]; } else if (order == 2) { ??? ca = MakeTetra2(); ??? cb = MakeTetra2(); Glue(Spin(cb.left[0]), ca.right[0], 1); for (i = 1; i < 4; i++) { if (i % 2!=0) { Glue(Spin (cb.left[i]), ca.right[i], 1); } else { Glue(Spin (cb.left[i]), Spin(Clock(ca.right[i])), 1); } } Glue(Spin(ca.back[0]), cb.front[0], 1); for (i = 1; i < 4; i++) { if (i % 2!=0) { Glue(Spin (ca.back[i]), cb.front[i], 1); } else { Glue(Clock(ca.back[i]), cb.front[i], 1); } } return ca.back[0]; } else if (order == 3){ ??? ca = MakeTetra3(); ??? cb = MakeTetra3(); { Glue(Spin(cb.left[0]), ca.right[0], 1); for (i = 1; i < 4; i++) { if (i % 2!=0) { Glue(Spin (cb.left[i]), ca.right[i], 1); } else { Glue(Spin (cb.left[i]), Spin(Clock(ca.right[i])), 1); } } for (i = 4; i <= (8); i++) { if (i % 2 == 0) { Glue(Spin (cb.left[i]), ca.right[i], 1); } else { Glue(Spin (cb.left[i]), Spin(Clock(ca.right[i])), 1); } } Glue(Spin (ca.back[0]), cb.front[0], 1); for (i = 1; i < 4; i++) { if (i % 2!=0) { Glue(Spin (ca.back[i]), cb.front[i], 1); } else { Glue(Clock(ca.back[i]), cb.front[i], 1); } } for (i = 4; i <= (8); i++) { if (i % 2 == 0) { Glue(Spin (ca.back[i]), cb.front[i], 1); } else { Glue(Clock(ca.back[i]), cb.front[i], 1); } } return ca.back[0]; } } else if (order == 4){ ??? ca = MakeTetra4(); ??? cb = MakeTetra4(); { Glue(Spin(cb.left[0]), ca.right[0], 1); for (i = 1; i < 4; i++) { if (i % 2!=0) { Glue(Spin (cb.left[i]), ca.right[i], 1); } else { Glue(Spin (cb.left[i]), Spin(Clock(ca.right[i])), 1); } } for (i = 4; i <= (8); i++) { if (i % 2 == 0) { Glue(Spin (cb.left[i]), ca.right[i], 1); } else { Glue(Spin (cb.left[i]), Spin(Clock(ca.right[i])), 1); } } for (i = 9; i <= (15); i++) { if (i % 2!=0) { Glue(Spin (cb.left[i]), ca.right[i], 1); } else { Glue(Spin (cb.left[i]), Spin(Clock(ca.right[i])), 1); } } Glue(Spin (ca.back[0]), cb.front[0], 1); for (i = 1; i < 4; i++) { if (i % 2!=0) { Glue(Spin (ca.back[i]), cb.front[i], 1); } else { Glue(Clock(ca.back[i]), cb.front[i], 1); } } for (i = 4; i <= (8); i++) { if (i % 2 == 0) { Glue(Spin (ca.back[i]), cb.front[i], 1); } else { Glue(Clock(ca.back[i]), cb.front[i], 1); } } for (i = 9; i <= (15); i++) { if (i % 2!=0) { Glue(Spin (ca.back[i]), cb.front[i], 1); } else { Glue(Clock(ca.back[i]), cb.front[i], 1); } } return ca.back[0]; } } else if (order == 5){ ??? ca = MakeTetra5(); ??? cb = MakeTetra5(); { Glue(Spin(cb.left[0]), ca.right[0], 1); for (i = 1; i < 4; i++) { if (i % 2!=0) { Glue(Spin (cb.left[i]), ca.right[i], 1); } else { Glue(Spin (cb.left[i]), Spin(Clock(ca.right[i])), 1); } } for (i = 4; i <= (8); i++) { if (i % 2 == 0) { Glue(Spin (cb.left[i]), ca.right[i], 1); } else { Glue(Spin (cb.left[i]), Spin(Clock(ca.right[i])), 1); } } for (i = 9; i <= (15); i++) { if (i % 2!=0) { Glue(Spin (cb.left[i]), ca.right[i], 1); } else { Glue(Spin (cb.left[i]), Spin(Clock(ca.right[i])), 1); } } for (i = 16; i <= (24); i++) { if (i % 2 == 0) { Glue(Spin (cb.left[i]), ca.right[i], 1); } else { Glue(Spin (cb.left[i]), Spin(Clock(ca.right[i])), 1); } } Glue(Spin (ca.back[0]), cb.front[0], 1); for (i = 1; i < 4; i++) { if (i % 2!=0) { Glue(Spin (ca.back[i]), cb.front[i], 1); } else { Glue(Clock(ca.back[i]), cb.front[i], 1); } } for (i = 4; i <= (8); i++) { if (i % 2 == 0) { Glue(Spin (ca.back[i]), cb.front[i], 1); } else { Glue(Clock(ca.back[i]), cb.front[i], 1); } } for (i = 9; i <= (15); i++) { if (i % 2!=0) { Glue(Spin (ca.back[i]), cb.front[i], 1); } else { Glue(Clock(ca.back[i]), cb.front[i], 1); } } for (i = 16; i <= (24); i++) { if (i % 2 == 0) { Glue(Spin (ca.back[i]), cb.front[i], 1); } else { Glue(Clock(ca.back[i]), cb.front[i], 1); } } return ca.back[0]; } } return Triangulation.MakeWedge(); } /* END MakeMaximalGlue */ Place_t MakeSphere2Sub(uint order) { ??? a = MakeMaximalGlue(order); /* Return a place not killed by the Glue Procedure: */ return a; } { } Refine. /* Copyright © 2000 Universidade Estadual de Campinas (UNICAMP) */ /* {MakeSphere2Sub} was {MakeSphere2} in {MakeManifold.c}. */ /* From {MakeManifold.c}: */ case Shape_Sphere2Sub: return MakeSphere2Sub(order); if (0 == strcmp(o->shapeName, "sphere2/sub")) { o->shape = Shape_Sphere2Sub; } else