causalMatrix[sortedCoords_List,edgeList_,pointNumber_]:=Module[{CGRules,indexEdges,prematrix},CGRules=sortedCoords[[#]]Range[Length@sortedCoords][[#]]&/@Range[Length@sortedCoords];indexEdges=edgeList/.CGRules;prematrix=Table[{indexEdges[[n,1]],indexEdges[[n,2]]},{n,1,Length@indexEdges}];SparseArray[prematrix[[#]]1&/@Range[Length@prematrix],{pointNumber,pointNumber}]](*GivesalistofallpointsNlinksinthepastofagivenstartingpoint*)layerPastN[linkMatrixTransposed_,x_,n_Integer]:=Flatten[Position[(MatrixPower[linkMatrixTransposed,n])[[x]],_?Positive]]volumeOfVertices[caugraph_,linkMatrixTransposed_,vertexlist_,x_,y_]:=Module[{linkDistance1,linkDistance2,volume1,volume2},Table[linkDistance1=GraphDistance[caugraph,x,vertex];linkDistance2=GraphDistance[caugraph,y,vertex];volume1=Length[DeleteDuplicates[Flatten[layerPastN[linkMatrixTransposed,vertex,#]&/@Range[linkDistance1]]]];volume2=Length[DeleteDuplicates[Flatten[layerPastN[linkMatrixTransposed,vertex,#]&/@Range[linkDistance2]]]];volume1+volume2,{vertex,vertexlist}]] (*Givesthepointvolumeofthetriangleformedbytwospacelikepointsandthepointwheretheirlightconesintersect*)spaceVolume[linkmatrix_,causalmatrixTransposed_,caugraph_,x_,y_]:=Module[{slice1,slice2,posvertexList,caufollow,vertexlist,linkMatrixTransposed,totalVolume},linkMatrixTransposed=Transpose[Normal[linkmatrix]];slice1=Select[causalmatrixTransposed,(#[[x]]*#[[y]])==1&];posvertexList=Flatten[Position[causalmatrixTransposed,slice1[[#]]]&/@Range[Length[slice1]]];caufollow=DeleteDuplicates[Flatten[Table[Select[causalmatrixTransposed,#[[n]]==1&],{n,posvertexList}],1]];slice2=Select[slice1,!MemberQ[caufollow,#]&];vertexlist=DeleteDuplicates[Flatten[Position[causalmatrixTransposed,slice2[[#]]]&/@Range[Length[slice2]]]];totalVolume=volumeOfVertices[caugraph,linkMatrixTransposed,vertexlist,x,y];Min[totalVolume]/2.0](*Calculatesthespacelikedistanceoftwospacelikepointsusingtheabovefunctions*)spaceDistance2D[linkmatrix_,causalmatrixTransposed_,caugraph_,x_,y_,density_]:=Module[{volume},volume=spaceVolume[linkmatrix,causalmatrixTransposed,caugraph,x,y];2*Sqrt[volume/density]]createCausalMatrices[causalMatrix_]:=Module[{linkmatrix,causalmatrixTransposed,reducedCausalGraph},reducedCausalGraph=TransitiveReductionGraph[AdjacencyGraph[causalMatrix]];linkmatrix=AdjacencyMatrix[reducedCausalGraph];causalmatrixTransposed=Transpose[Normal[causalMatrix]];{linkmatrix,causalmatrixTransposed,reducedCausalGraph}](*Calculatesthetimelike/spacelikedistanceofeachpairofpointsonaCausalSetusingtheabovefunctionsandlengthoflongestchainmethodfortimelikedistance*)spaceTimeDistance2D[causalmatrix_,density_]:=Module[{pointNumber,lChainMatrix,DistanceMatrix,spacelikePairs,distanceMatrix,linkmatrix,causalmatrixTransposed,caugraph},{linkmatrix,causalmatrixTransposed,caugraph}=createCausalMatrices[causalmatrix];pointNumber=Length[linkmatrix];lChainMatrix=Total[UnitStep[NestWhileList[#.causalmatrix&,causalmatrix,#≠ConstantArray[0,{pointNumber,pointNumber}]&]-0.1]];DistanceMatrix=N[lChainMatrix/(2*Sqrt[(density/2)])];spacelikePairs=Select[Position[Normal[lChainMatrix],0,2],#[[1]]<#[[2]]&];(DistanceMatrix[[spacelikePairs[[#,1]],spacelikePairs[[#,2]]]]=spaceDistance2D[linkmatrix,causalmatrixTransposed,caugraph,spacelikePairs[[#,1]],spacelikePairs[[#,2]],density])&/@Range[Length[spacelikePairs]];DistanceMatrix]spaceTimeDistance2D[causalmatrix_,density_,pointsInOpenset_]:=Module[{pointNumber,lChainMatrix,DistanceMatrix,spacelikePairs,distanceMatrix,linkmatrix,causalmatrixTransposed,caugraph},{linkmatrix,causalmatrixTransposed,caugraph}=createCausalMatrices[causalmatrix];pointNumber=Length[linkmatrix];lChainMatrix=Total[UnitStep[NestWhileList[#.causalmatrix&,causalmatrix,#≠ConstantArray[0,{pointNumber,pointNumber}]&]-0.1]];DistanceMatrix=N[lChainMatrix/(2*Sqrt[(density/2)])];spacelikePairs=Select[Position[Normal[lChainMatrix],0,2],(pointsInOpenset[{#[[1]]}]&&pointsInOpenset[{#[[2]]}]&&#[[1]]<#[[2]])&];(DistanceMatrix[[spacelikePairs[[#,1]],spacelikePairs[[#,2]]]]=spaceDistance2D[linkmatrix,causalmatrixTransposed,caugraph,spacelikePairs[[#,1]],spacelikePairs[[#,2]],density])&/@Range[Length[spacelikePairs]];DistanceMatrix]