#define PROG_NAME "MakeComplex" #define PROG_DESC "???" #define PROG_VERS "1.0" #define MakeComplex_C_COPYRIGHT \ "" #define PROG_INFO \ "" \ " " /* This program generates ".tp",".tb",".st" and ".ma" files for some simples tridimensional maps homeomorphics to three-manifolds. The node coordinates are random numbers in [-1..+1]. The maps builds through the "MakeComplex" program results in dege- neracies. So, is necessary submit these resulting maps to aditional procedures for remove such degeneracies, such as the "BarySubdivision" and "SelectSubdivision" procedures. Revisions: 28-09-2000: Added the 3D maps `Dodecahedral Seifert-Weber' and `Poincare Space'. This maps have topology of closed 3D manifolds and aren't homemorphic to the hypersphere S^{3}. */ #include #include #include #include #include #include #define _GNU_SOURCE #include CONST double Order = 1; TYPE Shape == { Sphere, Cm2t, Torus, Pseudo, Seifert, Poincare, Lens1, Lens2, Lens3, Lens4, Lens5 }; typedef struct Options_t { shape: Shape; shapeName: char *; } Penta == ARRAY [0..4] OF ARRAY [0..1] OF Place_t; Free == ARRAY [0..4] OF Place_t; Options_t *GetOptions(int argc, char **argv); int main(int argc, char **argv) { Options_t *o = GetOptions(argc, argv); char *topo_cmt = NULL; asprintf(&topo_cmt, "Created by %s on %s", PROG_NAME, Today()); /* Random_t coins = MakeRandomSource(4615); */ ??? m = MakeMap(o->shape); ??? t = MakeTopology(m; with (0), double c = GenCoords(t)^ ){ /* Set the root elements for edges and walls */ for (i = 0; i < t.NF; i++) { Wall_t f = t.wall.el[i]; f->root = f->num; } for (i = 0; i < t.NE; i++) { Edge_t e = t.edge.el[i]; e->root = e->num; } WriteTopology(o->output, flag, &t, topo_cmt); // shapeName MakeComplex shapeName WriteTable(o->output, flag, &t, topo_cmt); // shapeName MakeComplex shapeName WriteState( o->shapeName, t, c, "Created by MakeComplex: " & o->shapeName & ".st on " & Today() & "\nRandom Geometry"); /*Triangulation.FindDegeneracies(t);*/ WriteMaterials(o->output, flag, &t, topo_cmt); // shapeName MakeComplex shapeName return 0; } Place_t MakeMap(Shape shape) { CASE shape OF break; case Shape_Sphere: return MakeSphere(); break; case Shape_Cm2t: return MakeCm2t(); break; case Shape_Torus: return MakeTorus(); break; case Shape_Pseudo: return MakePseudo(); break; case Shape_Seifert: return MakeSeifert(); break; case Shape_Poincare: return MakePoincare(); break; case Shape_Lens1: return MakeLens1(); break; case Shape_Lens2: return MakeLens2(); break; case Shape_Lens3: return MakeLens3(); break; case Shape_Lens4: return MakeLens4(); break; case Shape_Lens5: return MakeLens5(); } } /* END MakeMap */ Place_t MakeTorus() { ??? a = MakeBigCube(Order); { GlueBigCube(Clock(Spin(PrevF(a[Order-1,0,0]))), Spin(PrevF(PrevE(PrevE(a[0,0,0])))), Order); GlueBigCube(Spin(a[Order-1,0,1]), Clock(Spin(a[Order-1,0,0])),Order); GlueBigCube(Spin(NextF(PrevE(a[0,0,1]))), Clock(Spin(NextF(NextE(a[0,Order-1,1])))), Order); fprintf(stderr, "Building topology of Torus: \n"); /* Return one @place not kill by the GlueBigCube procedure */ return a[0,0,1]; } } /* END MakeTorus */ Place_t MakeSphere() { ??? a = MakeTetraTopo(Order; with (Order) ){ Glue(Spin(a[1]),a[0],Order); Glue(Spin(a[3]),a[2],Order); fprintf(stderr, "Building topology of Sphere: \n"); /* Return one @place not kill by the Glue Procedure */ return a[1]; } } /* END MakeSphere */ /* UNUSED */ Place_t MakeSphere_H1() { ??? a = MakeTetraTopo(Order; with (Order) ){ Glue(Spin(a[5]),a[4],Order); Glue(Spin(a[7]),a[6],Order); fprintf(stderr, "Building topology of Sphere-h1: \n"); /* Return one @place not kill by the Glue Procedure */ return a[5]; } } /* END MakeSphere_H1 */ /* UNUSED */ Place_t MakeSphere_H2() { ??? a = MakeTetraTopo(Order; with (Order) ){ Glue(Spin(a[1]),a[0],Order); Glue(Spin(a[7]),a[6],Order); fprintf(stderr, "Building topology of Sphere-h2: \n"); /* Return one @place not kill by the Glue Procedure */ return a[1]; } } /* END MakeSphere_H2 */ /* UNUSED */ Place_t MakeSphere_H3() { ??? a = MakeTetraTopo(Order; with (Order) ){ Glue(Spin(a[5]),a[4],Order); Glue(Spin(a[3]),a[2],Order); fprintf(stderr, "Building topology of Sphere-h3: \n"); /* Return one @place not kill by the Glue Procedure */ return a[5]; } } /* END MakeSphere_H3 */ Place_t MakeCm2t() { ??? a = MakeTetraTopo(Order; with (Order), double b = MakeTetraTopo(Order,Order) ){ Glue(Spin(a[1]),b[0],Order); Glue(Spin(a[3]),a[2],Order); Glue(Spin(b[1]),a[0],Order); Glue(Spin(b[3]),b[2],Order); fprintf(stderr, "Building topology of Cm2t: \n"); /* Return one @place not kill by the Glue Procedure */ return Spin(a[3]); } } /* END MakeCm2t */ Place_t MakePoincare() /* This procedure builds the 3-map so called as: "Poincare Dodecahedral Space", generated by gluing @places of opposite wall of a triangulated dodecahedron, when one menber of each @place is matched to its conter- part after a rotation of one-tenth of a turn == PI/5. Equal to the Lens1 procedure below. I believe that still persist one bug !!!. Since the map must be have: double nv = 12 and ne == 72 and not nv == 13 and ne == 73 !!!. */ { ??? d = TriangulatedDodecahedron2(); { /* the opposite walls are: d[0] d[6] d[1] d[9] d[2] d[8] d[3] d[7] d[4] d[11] d[5] d[10] */ EVAL Glue(Clock(d[0][0]), d[6][0],1); EVAL Glue(Clock(d[0][1]), d[6][4],1); EVAL Glue(Clock(d[0][2]), d[6][3],1); EVAL Glue(Clock(d[0][3]), d[6][2],1); EVAL Glue(Clock(d[0][4]), d[6][1],1); EVAL Glue(Clock(d[1][0]), d[9][0],1); EVAL Glue(Clock(d[1][1]), d[9][4],1); EVAL Glue(Clock(d[1][2]), d[9][3],1); EVAL Glue(Clock(d[1][3]), d[9][2],1); EVAL Glue(Clock(d[1][4]), d[9][1],1); EVAL Glue(Clock(d[2][0]), d[8][0],1); EVAL Glue(Clock(d[2][1]), d[8][4],1); EVAL Glue(Clock(d[2][2]), d[8][3],1); EVAL Glue(Clock(d[2][3]), d[8][2],1); EVAL Glue(Clock(d[2][4]), d[8][1],1); EVAL Glue(Clock(d[3][0]), d[7][0],1); EVAL Glue(Clock(d[3][1]), d[7][4],1); EVAL Glue(Clock(d[3][2]), d[7][3],1); EVAL Glue(Clock(d[3][3]), d[7][2],1); EVAL Glue(Clock(d[3][4]), d[7][1],1); EVAL Glue(Clock(d[4][0]), d[11][0],1); EVAL Glue(Clock(d[4][1]), d[11][4],1); EVAL Glue(Clock(d[4][2]), d[11][3],1); EVAL Glue(Clock(d[4][3]), d[11][2],1); EVAL Glue(Clock(d[4][4]), d[11][1],1); EVAL Glue(Clock(d[5][0]), d[10][0],1); EVAL Glue(Clock(d[5][1]), d[10][4],1); EVAL Glue(Clock(d[5][2]), d[10][3],1); EVAL Glue(Clock(d[5][3]), d[10][2],1); EVAL Glue(Clock(d[5][4]), d[10][1],1); fprintf(stderr, "Building the topology of the Poincare Dodecahedral Space:\n"); /* Return one @place not kill by the Glue Procedure */ return d[0][0]; } } /* END MakePoincare */ Place_t MakeSeifert() /* This procedure builds the 3-map so called as: "Seifert-Weber Space", generated by gluing @places of opposite wall of a triangulated dodecahedron, when one menber of each @place is matched to its conter- part after a rotation of three-tenth of a turn == 3/5 PI. Equal to the Lens4 procedure bellow. */ { ??? d = TriangulatedDodecahedron2(); { /* the opposite walls are: d[0] d[6] d[1] d[9] d[2] d[8] d[3] d[7] d[4] d[11] d[5] d[10] */ EVAL Glue(Clock(d[0][0]), d[6][3],1); EVAL Glue(Clock(d[0][1]), d[6][2],1); EVAL Glue(Clock(d[0][2]), d[6][1],1); EVAL Glue(Clock(d[0][3]), d[6][0],1); EVAL Glue(Clock(d[0][4]), d[6][4],1); EVAL Glue(Clock(d[1][0]), d[9][3],1); EVAL Glue(Clock(d[1][1]), d[9][2],1); EVAL Glue(Clock(d[1][2]), d[9][1],1); EVAL Glue(Clock(d[1][3]), d[9][0],1); EVAL Glue(Clock(d[1][4]), d[9][4],1); EVAL Glue(Clock(d[2][0]), d[8][3],1); EVAL Glue(Clock(d[2][1]), d[8][2],1); EVAL Glue(Clock(d[2][2]), d[8][1],1); EVAL Glue(Clock(d[2][3]), d[8][0],1); EVAL Glue(Clock(d[2][4]), d[8][4],1); EVAL Glue(Clock(d[3][0]), d[7][3],1); EVAL Glue(Clock(d[3][1]), d[7][2],1); EVAL Glue(Clock(d[3][2]), d[7][1],1); EVAL Glue(Clock(d[3][3]), d[7][0],1); EVAL Glue(Clock(d[3][4]), d[7][4],1); EVAL Glue(Clock(d[4][0]), d[11][3],1); EVAL Glue(Clock(d[4][1]), d[11][2],1); EVAL Glue(Clock(d[4][2]), d[11][1],1); EVAL Glue(Clock(d[4][3]), d[11][0],1); EVAL Glue(Clock(d[4][4]), d[11][4],1); EVAL Glue(Clock(d[5][0]), d[10][3],1); EVAL Glue(Clock(d[5][1]), d[10][2],1); EVAL Glue(Clock(d[5][2]), d[10][1],1); EVAL Glue(Clock(d[5][3]), d[10][0],1); EVAL Glue(Clock(d[5][4]), d[10][4],1); fprintf(stderr, "Building the topology of the Seifert-Weber Space:\n"); /* Return one @place not kill by the Glue Procedure */ return d[0][0]; } } /* END MakeSeifert */ Place_t MakeLens1() /* This procedure builds the 3-map generated by gluing @places of opposite wall of a triangulated dodecahedron, when one menber of each @place is matched to its conterpart after a rotation of 36 degrees of a turn. */ { ??? d = TriangulatedDodecahedron2(); { /* the opposite walls are: d[0] d[6] d[1] d[9] d[2] d[8] d[3] d[7] d[4] d[11] d[5] d[10] */ EVAL Glue(Clock(d[0][0]), d[6][0],1); EVAL Glue(Clock(d[0][1]), d[6][4],1); EVAL Glue(Clock(d[0][2]), d[6][3],1); EVAL Glue(Clock(d[0][3]), d[6][2],1); EVAL Glue(Clock(d[0][4]), d[6][1],1); EVAL Glue(Clock(d[1][0]), d[9][0],1); EVAL Glue(Clock(d[1][1]), d[9][4],1); EVAL Glue(Clock(d[1][2]), d[9][3],1); EVAL Glue(Clock(d[1][3]), d[9][2],1); EVAL Glue(Clock(d[1][4]), d[9][1],1); EVAL Glue(Clock(d[2][0]), d[8][0],1); EVAL Glue(Clock(d[2][1]), d[8][4],1); EVAL Glue(Clock(d[2][2]), d[8][3],1); EVAL Glue(Clock(d[2][3]), d[8][2],1); EVAL Glue(Clock(d[2][4]), d[8][1],1); EVAL Glue(Clock(d[3][0]), d[7][0],1); EVAL Glue(Clock(d[3][1]), d[7][4],1); EVAL Glue(Clock(d[3][2]), d[7][3],1); EVAL Glue(Clock(d[3][3]), d[7][2],1); EVAL Glue(Clock(d[3][4]), d[7][1],1); EVAL Glue(Clock(d[4][0]), d[11][0],1); EVAL Glue(Clock(d[4][1]), d[11][4],1); EVAL Glue(Clock(d[4][2]), d[11][3],1); EVAL Glue(Clock(d[4][3]), d[11][2],1); EVAL Glue(Clock(d[4][4]), d[11][1],1); EVAL Glue(Clock(d[5][0]), d[10][0],1); EVAL Glue(Clock(d[5][1]), d[10][4],1); EVAL Glue(Clock(d[5][2]), d[10][3],1); EVAL Glue(Clock(d[5][3]), d[10][2],1); EVAL Glue(Clock(d[5][4]), d[10][1],1); fprintf(stderr, "Building topology of Lens1 :\n"); /* Return one @place not kill by the Glue Procedure */ return d[0][0]; } } /* END MakeLens1 */ Place_t MakeLens2() /* This procedure builds the 3-map generated by gluing @places of opposite wall of a triangulated dodecahedron, when one menber of each @place is matched to its conterpart after a rotation of 108 degrees of a turn. */ { ??? d = TriangulatedDodecahedron2(); { /* the opposite walls are: d[0] d[6] d[1] d[9] d[2] d[8] d[3] d[7] d[4] d[11] d[5] d[10] */ EVAL Glue(Clock(d[0][0]), d[6][1],1); EVAL Glue(Clock(d[0][1]), d[6][0],1); EVAL Glue(Clock(d[0][2]), d[6][4],1); EVAL Glue(Clock(d[0][3]), d[6][3],1); EVAL Glue(Clock(d[0][4]), d[6][2],1); EVAL Glue(Clock(d[1][0]), d[9][1],1); EVAL Glue(Clock(d[1][1]), d[9][0],1); EVAL Glue(Clock(d[1][2]), d[9][4],1); EVAL Glue(Clock(d[1][3]), d[9][3],1); EVAL Glue(Clock(d[1][4]), d[9][2],1); EVAL Glue(Clock(d[2][0]), d[8][1],1); EVAL Glue(Clock(d[2][1]), d[8][0],1); EVAL Glue(Clock(d[2][2]), d[8][4],1); EVAL Glue(Clock(d[2][3]), d[8][3],1); EVAL Glue(Clock(d[2][4]), d[8][2],1); EVAL Glue(Clock(d[3][0]), d[7][1],1); EVAL Glue(Clock(d[3][1]), d[7][0],1); EVAL Glue(Clock(d[3][2]), d[7][4],1); EVAL Glue(Clock(d[3][3]), d[7][3],1); EVAL Glue(Clock(d[3][4]), d[7][2],1); EVAL Glue(Clock(d[4][0]), d[11][1],1); EVAL Glue(Clock(d[4][1]), d[11][0],1); EVAL Glue(Clock(d[4][2]), d[11][4],1); EVAL Glue(Clock(d[4][3]), d[11][3],1); EVAL Glue(Clock(d[4][4]), d[11][2],1); EVAL Glue(Clock(d[5][0]), d[10][1],1); EVAL Glue(Clock(d[5][1]), d[10][0],1); EVAL Glue(Clock(d[5][2]), d[10][4],1); EVAL Glue(Clock(d[5][3]), d[10][3],1); EVAL Glue(Clock(d[5][4]), d[10][2],1); fprintf(stderr, "Building topology of Lens2 :\n"); /* Return one @place not kill by the Glue Procedure */ return d[0][0]; } } /* END MakeLens2 */ Place_t MakeLens3() /* This procedure builds the 3-map generated by gluing @places of opposite wall of a triangulated dodecahedron, when one menber of each @place is matched to its conterpart after a rotation of 180 degree of a turn. */ { ??? d = TriangulatedDodecahedron2(); { /* the opposite walls are: d[0] d[6] d[1] d[9] d[2] d[8] d[3] d[7] d[4] d[11] d[5] d[10] */ EVAL Glue(Clock(d[0][0]), d[6][2],1); EVAL Glue(Clock(d[0][1]), d[6][1],1); EVAL Glue(Clock(d[0][2]), d[6][0],1); EVAL Glue(Clock(d[0][3]), d[6][4],1); EVAL Glue(Clock(d[0][4]), d[6][3],1); EVAL Glue(Clock(d[1][0]), d[9][2],1); EVAL Glue(Clock(d[1][1]), d[9][1],1); EVAL Glue(Clock(d[1][2]), d[9][0],1); EVAL Glue(Clock(d[1][3]), d[9][4],1); EVAL Glue(Clock(d[1][4]), d[9][3],1); EVAL Glue(Clock(d[2][0]), d[8][2],1); EVAL Glue(Clock(d[2][1]), d[8][1],1); EVAL Glue(Clock(d[2][2]), d[8][0],1); EVAL Glue(Clock(d[2][3]), d[8][4],1); EVAL Glue(Clock(d[2][4]), d[8][3],1); EVAL Glue(Clock(d[3][0]), d[7][2],1); EVAL Glue(Clock(d[3][1]), d[7][1],1); EVAL Glue(Clock(d[3][2]), d[7][0],1); EVAL Glue(Clock(d[3][3]), d[7][4],1); EVAL Glue(Clock(d[3][4]), d[7][3],1); EVAL Glue(Clock(d[4][0]), d[11][2],1); EVAL Glue(Clock(d[4][1]), d[11][1],1); EVAL Glue(Clock(d[4][2]), d[11][0],1); EVAL Glue(Clock(d[4][3]), d[11][4],1); EVAL Glue(Clock(d[4][4]), d[11][3],1); EVAL Glue(Clock(d[5][0]), d[10][2],1); EVAL Glue(Clock(d[5][1]), d[10][1],1); EVAL Glue(Clock(d[5][2]), d[10][0],1); EVAL Glue(Clock(d[5][3]), d[10][4],1); EVAL Glue(Clock(d[5][4]), d[10][3],1); fprintf(stderr, "Building topology of Lens3 :\n"); /* Return one @place not kill by the Glue Procedure */ return d[0][0]; } } /* END MakeLens3 */ Place_t MakeLens4() /* This procedure builds the 3-map generated by gluing @places of opposite wall of a triangulated dodecahedron, when one menber of each @place is matched to its conterpart after a rotation of 252 degree of a turn. (three-tenth of turn in the clockwise sense). */ { ??? d = TriangulatedDodecahedron2(); { /* the opposite walls are: d[0] d[6] d[1] d[9] d[2] d[8] d[3] d[7] d[4] d[11] d[5] d[10] */ EVAL Glue(Clock(d[0][0]), d[6][3],1); EVAL Glue(Clock(d[0][1]), d[6][2],1); EVAL Glue(Clock(d[0][2]), d[6][1],1); EVAL Glue(Clock(d[0][3]), d[6][0],1); EVAL Glue(Clock(d[0][4]), d[6][4],1); EVAL Glue(Clock(d[1][0]), d[9][3],1); EVAL Glue(Clock(d[1][1]), d[9][2],1); EVAL Glue(Clock(d[1][2]), d[9][1],1); EVAL Glue(Clock(d[1][3]), d[9][0],1); EVAL Glue(Clock(d[1][4]), d[9][4],1); EVAL Glue(Clock(d[2][0]), d[8][3],1); EVAL Glue(Clock(d[2][1]), d[8][2],1); EVAL Glue(Clock(d[2][2]), d[8][1],1); EVAL Glue(Clock(d[2][3]), d[8][0],1); EVAL Glue(Clock(d[2][4]), d[8][4],1); EVAL Glue(Clock(d[3][0]), d[7][3],1); EVAL Glue(Clock(d[3][1]), d[7][2],1); EVAL Glue(Clock(d[3][2]), d[7][1],1); EVAL Glue(Clock(d[3][3]), d[7][0],1); EVAL Glue(Clock(d[3][4]), d[7][4],1); EVAL Glue(Clock(d[4][0]), d[11][3],1); EVAL Glue(Clock(d[4][1]), d[11][2],1); EVAL Glue(Clock(d[4][2]), d[11][1],1); EVAL Glue(Clock(d[4][3]), d[11][0],1); EVAL Glue(Clock(d[4][4]), d[11][4],1); EVAL Glue(Clock(d[5][0]), d[10][3],1); EVAL Glue(Clock(d[5][1]), d[10][2],1); EVAL Glue(Clock(d[5][2]), d[10][1],1); EVAL Glue(Clock(d[5][3]), d[10][0],1); EVAL Glue(Clock(d[5][4]), d[10][4],1); fprintf(stderr, "Building topology of Lens4 :\n"); /* Return one @place not kill by the Glue Procedure */ return d[0][0]; } } /* END MakeLens4 */ Place_t MakeLens5() /* This procedure builds the 3-map generated by gluing @places of opposite wall of a triangulated dodecahedron, when one menber of each @place is matched to its conterpart after a rotation of 324 degree of a turn. */ { ??? d = TriangulatedDodecahedron2(); { /* the opposite walls are: d[0] d[6] d[1] d[9] d[2] d[8] d[3] d[7] d[4] d[11] d[5] d[10] */ EVAL Glue(Clock(d[0][0]), d[6][4],1); EVAL Glue(Clock(d[0][1]), d[6][3],1); EVAL Glue(Clock(d[0][2]), d[6][2],1); EVAL Glue(Clock(d[0][3]), d[6][1],1); EVAL Glue(Clock(d[0][4]), d[6][0],1); EVAL Glue(Clock(d[1][0]), d[9][4],1); EVAL Glue(Clock(d[1][1]), d[9][3],1); EVAL Glue(Clock(d[1][2]), d[9][2],1); EVAL Glue(Clock(d[1][3]), d[9][1],1); EVAL Glue(Clock(d[1][4]), d[9][0],1); EVAL Glue(Clock(d[2][0]), d[8][4],1); EVAL Glue(Clock(d[2][1]), d[8][3],1); EVAL Glue(Clock(d[2][2]), d[8][2],1); EVAL Glue(Clock(d[2][3]), d[8][1],1); EVAL Glue(Clock(d[2][4]), d[8][0],1); EVAL Glue(Clock(d[3][0]), d[7][4],1); EVAL Glue(Clock(d[3][1]), d[7][3],1); EVAL Glue(Clock(d[3][2]), d[7][2],1); EVAL Glue(Clock(d[3][3]), d[7][1],1); EVAL Glue(Clock(d[3][4]), d[7][0],1); EVAL Glue(Clock(d[4][0]), d[11][4],1); EVAL Glue(Clock(d[4][1]), d[11][3],1); EVAL Glue(Clock(d[4][2]), d[11][2],1); EVAL Glue(Clock(d[4][3]), d[11][1],1); EVAL Glue(Clock(d[4][4]), d[11][0],1); EVAL Glue(Clock(d[5][0]), d[10][4],1); EVAL Glue(Clock(d[5][1]), d[10][3],1); EVAL Glue(Clock(d[5][2]), d[10][2],1); EVAL Glue(Clock(d[5][3]), d[10][1],1); EVAL Glue(Clock(d[5][4]), d[10][0],1); fprintf(stderr, "Building topology of Lens5 :\n"); /* Return one @place not kill by the Glue Procedure */ return d[0][0]; } } /* END MakeLens5 */ Place_t MakePseudo() /* Build the tridimensional cellular map so called "PseudoManifold". This map under this gluing will produce degenerate configuration. */ { ??? ca = MakeFunnyBall(); { GlueBall(ca.p[0], PrevF(ca.p[1])); GlueBall(ca.p[1], PrevF(ca.p[2])); fprintf(stderr, "Building Topology of PseudoManifold: \n"); /* Return one @place not kill by the GlueBall Procedure */ return ca.p[2]; } } /* END MakePseudo */ /* UNUSED */ Place_t MakeCm2t_H1() /* This complex is homeomorphic to cm2t manifold */ { ??? a = MakeTetraTopo(Order; with (Order), double b = MakeTetraTopo(Order,Order) ){ Glue(Spin(b[3]),a[2],Order); Glue(Spin(a[3]),b[2],Order); Glue(Spin(b[1]),b[0],Order); Glue(Spin(a[1]),a[0],Order); fprintf(stderr, "Building topology of cm2t-h1: \n"); /* Return one @place not kill by the Glue Procedure */ return Spin(b[1]); } } /* END MakeCm2t_H1 */ /* UNUSED */ Place_t MakeCm2t_H2() /* This complex is homeomorphic to cm2t manifold */ { ??? a = MakeTetraTopo(Order; with (Order), double b = MakeTetraTopo(Order,Order) ){ Glue(Spin(a[6]),b[3],Order); Glue(Spin(a[7]),b[2],Order); Glue(Spin(b[1]),b[0],Order); Glue(Spin(a[1]),a[0],Order); fprintf(stderr, "Building topology of cm2t-h2: \n"); /* Return one @place not kill by the Glue Procedure */ return Spin(a[6]); } } /* END MakeCm2t_H2 */ /* UNUSED */ Place_t MakeCm2t_H3() /* This complex is homeomorphic to cm2t manifold */ { ??? a = MakeTetraTopo(Order; with (Order), double b = MakeTetraTopo(Order,Order) ){ Glue(Spin(a[7]),b[3],Order); Glue(Spin(a[6]),b[2],Order); Glue(Spin(b[1]),b[0],Order); Glue(Spin(a[1]),a[0],Order); fprintf(stderr, "Building topology of cm2t-h3:\n"); /* Return one @place not kill by the Glue Procedure */ return Spin(a[7]); } } /* END MakeCm2t_H3 */ Options_t *GetOptions(int argc, char **argv) { Options_t *o = (Options_t *)malloc(sizeof(Options_t)); argparser_t *pp = argparser_new(stderr, argc, argv); argparser_set_help(pp, PROG_NAME " version " PROG_VERS ", usage:\n" PROG_HELP); argparser_set_info(pp, PROG_INFO); argparser_process_help_info_options(pp); argparser_get_keyword(pp, "-shape"); o->shapeName = argparser_get_next(pp); if (0 == strcmp(o->shapeName, "sphere") )) { o->shape = Shape_Sphere } else if (0 == strcmp(o->shapeName,"cm2t") )){ o->shape = Shape_Cm2t } else if (0 == strcmp(o->shapeName,"torus") )){ o->shape = Shape_Torus } else if (0 == strcmp(o->shapeName,"pseudo") )){ o->shape = Shape_Pseudo } else if (0 == strcmp(o->shapeName,"seifert"))){ o->shape = Shape_Seifert } else if (0 == strcmp(o->shapeName,"poincare"))){ o->shape = Shape_Poincare } else if (0 == strcmp(o->shapeName,"lens1"))){ o->shape = Shape_Lens1 } else if (0 == strcmp(o->shapeName,"lens2"))){ o->shape = Shape_Lens2 } else if (0 == strcmp(o->shapeName,"lens3"))){ o->shape = Shape_Lens3 } else if (0 == strcmp(o->shapeName,"lens4"))){ o->shape = Shape_Lens4 } else if (0 == strcmp(o->shapeName,"lens5"))){ o->shape = Shape_Lens5 } else { argparser_error(pp, "Bad shape \"" & argparser_get_next(pp) & "\"\n") } argparser_finish(pp); ----------------------------------- #define _HELP \ fprintf(stderr, "Usage: MakeComplex \\\n" \ " -shape { Seifert | Poincare | ..}\n"); END¦ } } return o; } /* END GetOptions */ /* end MakeComplex */ /* Copyright © 2001 Universidade Estadual de Campinas (UNICAMP) */