Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.
Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.
| Download
GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it
Project: cocalc-sagemath-dev-slelievre
Views: 418346# (C)2007-2008 by Marc Roeder, # distribute under the terms of the GPL version 2.0 or later LoadPackage("hapcryst"); #### # Adjust these variables, if needed: # JAVAVIEW_PROGRAM:=Filename(DirectoriesSystemPrograms(),"javaview"); #JAVAVIEW_OUTPUT_DIR:=Directory("~/flatManifolds3d/tmp"); JAVAVIEW_OUTPUT_DIR:=DirectoryTemporary(); PRECISION:=9; ## PRECISION is the number of digits after the first non- zero digit ## after the comma. ## If your polytope looks too strange, increase this number. JAVAVIEW_WRAPPER_FILE:=Filename(DirectoriesPackageLibrary("hapcryst","examples"),"javaviewwrapper.txt"); ReadPackage("hapcryst","examples/orbitcoloring.gap"); ############ ### The following 3-dimensional space groups are Bieberbach. ### So you might try viewFundamentalDomain for those: bieberbachlist:=[ 1, 4, 7, 9, 19, 33, 34, 76, 142, 165 ]; ############################################################################# ## ## PLEASE READ THIS: ## ## to get a picture of a fundamental domain of a 3-dimensional Bieberbach ## group, just type ## viewFundamentalDomain([a,b,c],n); ## with a,b,c rational numbers and n a number from the bieberbachlist. ## ## or type ## viewTessellation([a,b,c],n); ## to get a part of the tessellation defined by the fundamental domain. ## The shown geometry contains hidden parts. Look at "Inspector>Display" ## The neighbouring parts are named by the face of the original fundamental ## cell they touch. You can view the names by making the fundamental domain ## "FD" active and tick the box at "Method>Show>Show Element Names". ## ## Use "Inspector>Camera" to zoom in and out. ############################################################################# ## ## This function takes a fundamental domain and colors the faces. ## It also calculates a set of images under <maps> and generates a ## JavaView file containing all that. ## writeFundamentalDomainAndImages:=function(poly,maps,group,point,groupnr) local startpointstring, filename, vertexonlypoly, abstract, title, detail, data, outputfile; startpointstring:=ReplacedString(JoinStringsWithSeparator(List(point,String),"_"),"/","."); filename:=Concatenation([numberWithLeadingZeros(groupnr,3), "__", startpointstring]); vertexonlypoly:=CreatePolymakeObjectFromFile(JAVAVIEW_OUTPUT_DIR,Concatenation(filename,".poly")); ClearPolymakeObject(vertexonlypoly); AppendVertexlistToPolymakeObject(vertexonlypoly,Polymake(poly,"VERTICES")); Unbind(vertexonlypoly); abstract:="Fundamental cell of cystallographic group "; Append(abstract,String(groupnr)); title:=Concatenation("FD ",String(groupnr)); detail:="This is the fundamental cell of the crystallographic group number "; Append(detail,String(groupnr)); Append(detail," from GAPs crystallographic groups library.\n The orbits are colored in each dimension.\n"); Append(detail,"Starting point for Dirichlet-Voronoi: "); Append(detail,String(point)); Append(detail,".\nOutput precision: "); Append(detail,String(PRECISION)); Append(detail," (this is the number of digits after the first non-zero entry after the point."); Append(detail,"\nGenerated using the GAP packages HAPcryst and polymake as well as the computational geometry package polymake."); data:=javaviewDatastring(poly,maps,group,PRECISION); Append(filename,".jvx"); outputfile:= OutputTextFile(Filename(JAVAVIEW_OUTPUT_DIR,filename), false ); WriteAll(outputfile, javaviewWrappedDatastring( title, abstract, detail, data, JAVAVIEW_WRAPPER_FILE) ); CloseStream(outputfile); return Filename(JAVAVIEW_OUTPUT_DIR,filename); end; ############################################################################# ## ## This just generates the fundamental domain and writes a JavaView file for it ## writeFundamentalDomain:=function(poly,group,point,groupnr) return writeFundamentalDomainAndImages(poly,[IdentityMat(4)],group,point,groupnr); end; ############################################################################# ## ## generateFundamentalDomain:=function(point,groupnr) local group, poly, filename,vo; group:=SpaceGroup(3,groupnr); # poly:=FundamentalDomainStandardSpaceGroup(point,group); poly:=FundamentalDomainBieberbachGroupNC(point,group); if not IsFundamentalDomainStandardSpaceGroup(poly,group) then Error("failed generating fundamental domain"); fi; filename:=writeFundamentalDomain(poly,group,point,groupnr); return filename; end; viewFundamentalDomain:=function(point,groupnr) local filename; filename:=generateFundamentalDomain(point,groupnr); Exec(Concatenation([JAVAVIEW_PROGRAM," ",filename])); return filename; end; generateTessellationFromPolytope:=function(point,poly,groupnr) local group, facets, vertices, orbitdecomp, maps, facet, orbit, otherfacet, filename; group:=SpaceGroup(3,groupnr); Polymake(poly,"FACETS VERTICES_IN_FACETS FACE_LATTICE"); facets:=Polymake(poly,"VERTICES_IN_FACETS"); vertices:=Polymake(poly,"VERTICES"); orbitdecomp:=edgeOrbitDecomposition(facets,vertices,group); maps:=[IdentityMat(4)]; for facet in facets do orbit:=First(orbitdecomp,o->facet in o); otherfacet:=First(orbit,f->f<>facet); Add(maps,RepresentativeActionOnRightOnSets(group,Set(otherfacet,i->vertices[i]),Set(facet,i->vertices[i]))); od; filename:=writeFundamentalDomainAndImages(poly,maps,group,point,groupnr); return filename; end; generateTessellation:=function(point,groupnr) local group, poly, filename; group:=SpaceGroup(3,groupnr); # poly:=FundamentalDomainStandardSpaceGroup(point,group); poly:=FundamentalDomainBieberbachGroupNC(point,group); filename:=generateTessellationFromPolytope(point,poly,groupnr); return filename; end; viewTessellation:=function(point,groupnr) local filename; filename:=generateTessellation(point,groupnr); Exec(Concatenation([JAVAVIEW_PROGRAM," ",filename])); return filename; end;