[cig-commits] r4309 - in long/3D/Gale/trunk/src/StGermain: .
Discretisation/Geometry/src Discretisation/Geometry/tests
walter at geodynamics.org
walter at geodynamics.org
Thu Aug 17 17:16:22 PDT 2006
Author: walter
Date: 2006-08-17 17:16:22 -0700 (Thu, 17 Aug 2006)
New Revision: 4309
Modified:
long/3D/Gale/trunk/src/StGermain/
long/3D/Gale/trunk/src/StGermain/Discretisation/Geometry/src/Delaunay.c
long/3D/Gale/trunk/src/StGermain/Discretisation/Geometry/src/ParallelDelaunay.c
long/3D/Gale/trunk/src/StGermain/Discretisation/Geometry/tests/testParallelDelaunay.c
Log:
r2686 at earth: boo | 2006-08-17 17:14:09 -0700
r2640 at earth (orig r3721): RaquibulHassan | 2006-07-27 04:28:28 -0700
Adding a function that can gather the indices of neighbouring triangles of each triangle in a parallel triangulation.
Property changes on: long/3D/Gale/trunk/src/StGermain
___________________________________________________________________
Name: svk:merge
- 1ef209d2-b310-0410-a72d-e20c9eb0015c:/cig:2685
afb6c753-b9d0-0310-b4e7-dbd8d91cdd35:/trunk/StGermain:3720
+ 1ef209d2-b310-0410-a72d-e20c9eb0015c:/cig:2686
afb6c753-b9d0-0310-b4e7-dbd8d91cdd35:/trunk/StGermain:3721
Modified: long/3D/Gale/trunk/src/StGermain/Discretisation/Geometry/src/Delaunay.c
===================================================================
--- long/3D/Gale/trunk/src/StGermain/Discretisation/Geometry/src/Delaunay.c 2006-08-18 00:16:18 UTC (rev 4308)
+++ long/3D/Gale/trunk/src/StGermain/Discretisation/Geometry/src/Delaunay.c 2006-08-18 00:16:22 UTC (rev 4309)
@@ -681,14 +681,16 @@
triIndices[triCount][1] = (((Site*)DEST(e))->id);
triIndices[triCount][2] = (((Site*)DEST(eOnext))->id);
- index = (int)(((QuadEdge*)((void*)e)) - delaunay->qp->quadEdges);
- edgeToTriangle[index][COUNT(e)] = triCount;
+ if( delaunay->attributes->BuildTriangleNeighbours ){
+ index = (int)(((QuadEdge*)((void*)e)) - delaunay->qp->quadEdges);
+ edgeToTriangle[index][COUNT(e)] = triCount;
- index = (int)(((QuadEdge*)((void*)eOnext)) - delaunay->qp->quadEdges);
- edgeToTriangle[index][COUNT(eOnext)] = triCount;
+ index = (int)(((QuadEdge*)((void*)eOnext)) - delaunay->qp->quadEdges);
+ edgeToTriangle[index][COUNT(eOnext)] = triCount;
- index = (int)(((QuadEdge*)((void*)eLnext)) - delaunay->qp->quadEdges);
- edgeToTriangle[index][COUNT(eLnext)] = triCount;
+ index = (int)(((QuadEdge*)((void*)eLnext)) - delaunay->qp->quadEdges);
+ edgeToTriangle[index][COUNT(eLnext)] = triCount;
+ }
triCount++;
}
@@ -698,15 +700,17 @@
triIndices[triCount][1] = (((Site*)DEST(e))->id);
triIndices[triCount][2] = (((Site*)DEST(eOnext))->id);
- index = (int)(((QuadEdge*)((void*)e)) - delaunay->qp->quadEdges);
- edgeToTriangle[index][COUNT(e)] = triCount;
+ if( delaunay->attributes->BuildTriangleNeighbours ){
+ index = (int)(((QuadEdge*)((void*)e)) - delaunay->qp->quadEdges);
+ edgeToTriangle[index][COUNT(e)] = triCount;
- index = (int)(((QuadEdge*)((void*)eOnext)) - delaunay->qp->quadEdges);
- edgeToTriangle[index][COUNT(eOnext)] = triCount;
+ index = (int)(((QuadEdge*)((void*)eOnext)) - delaunay->qp->quadEdges);
+ edgeToTriangle[index][COUNT(eOnext)] = triCount;
- index = (int)(((QuadEdge*)((void*)eLnext)) - delaunay->qp->quadEdges);
- edgeToTriangle[index][COUNT(eLnext)] = triCount;
-
+ index = (int)(((QuadEdge*)((void*)eLnext)) - delaunay->qp->quadEdges);
+ edgeToTriangle[index][COUNT(eLnext)] = triCount;
+ }
+
triCount++;
}
Modified: long/3D/Gale/trunk/src/StGermain/Discretisation/Geometry/src/ParallelDelaunay.c
===================================================================
--- long/3D/Gale/trunk/src/StGermain/Discretisation/Geometry/src/ParallelDelaunay.c 2006-08-18 00:16:18 UTC (rev 4308)
+++ long/3D/Gale/trunk/src/StGermain/Discretisation/Geometry/src/ParallelDelaunay.c 2006-08-18 00:16:22 UTC (rev 4309)
@@ -587,6 +587,8 @@
int pass = 0;
int **triIndices = NULL;
Delaunay *delaunay = NULL;
+ int **edgeToTriangle = NULL;
+ int index = 0;
delaunay = pd->localTriangulation;
@@ -595,11 +597,36 @@
delaunay->triangleIndices = Memory_Alloc_Array_Unnamed( int*, delaunay->numFaces );
delaunay->triangleIndices[0] = Memory_Alloc_Array_Unnamed( int, delaunay->numFaces * 3 );
memset( delaunay->triangleIndices[0] , 0, sizeof(int) * delaunay->numFaces * 3 );
+
+ if( delaunay->attributes->BuildTriangleNeighbours ){
+ delaunay->triangleNeighbours = Memory_Alloc_Array_Unnamed( int*, delaunay->numFaces );
+ delaunay->triangleNeighbours[0] = Memory_Alloc_Array_Unnamed( int, delaunay->numFaces*3 );
+ edgeToTriangle = Memory_Alloc_Array_Unnamed( int*, delaunay->qp->numQuadEdges );
+ edgeToTriangle[0] = Memory_Alloc_Array_Unnamed( int, delaunay->qp->numQuadEdges * 2 );
+ }
+
for( i=0; i<delaunay->numFaces; i++ ){
delaunay->triangleIndices[i] = delaunay->triangleIndices[0]+i*3;
+
+ if ( delaunay->attributes->BuildTriangleNeighbours ){
+ delaunay->triangleNeighbours[i] = delaunay->triangleNeighbours[0]+i*3;
+
+ delaunay->triangleNeighbours[i][0] = delaunay->numFaces;
+ delaunay->triangleNeighbours[i][1] = delaunay->numFaces;
+ delaunay->triangleNeighbours[i][2] = delaunay->numFaces;
+ }
}
-
+
+ if( delaunay->attributes->BuildTriangleNeighbours ){
+ for( i=0; i<delaunay->qp->numQuadEdges; i++ ){
+ edgeToTriangle[i] = edgeToTriangle[0]+i*2;
+
+ edgeToTriangle[i][0] = delaunay->numFaces;
+ edgeToTriangle[i][1] = delaunay->numFaces;
+ }
+ }
+
triIndices = delaunay->triangleIndices;
edges = delaunay->qp->quadEdges;
@@ -647,6 +674,19 @@
triIndices[triCount][0] = ParallelDelaunay_TranslateLocalToGlobal(pd, ((Site*)ORG(e))->id);
triIndices[triCount][1] = ParallelDelaunay_TranslateLocalToGlobal(pd, ((Site*)DEST(e))->id);
triIndices[triCount][2] = ParallelDelaunay_TranslateLocalToGlobal(pd, ((Site*)DEST(eOnext))->id);
+
+ if ( delaunay->attributes->BuildTriangleNeighbours ){
+
+ index = (int)(((QuadEdge*)((void*)e)) - delaunay->qp->quadEdges);
+ edgeToTriangle[index][COUNT(e)] = triCount;
+
+ index = (int)(((QuadEdge*)((void*)eOnext)) - delaunay->qp->quadEdges);
+ edgeToTriangle[index][COUNT(eOnext)] = triCount;
+
+ index = (int)(((QuadEdge*)((void*)eLnext)) - delaunay->qp->quadEdges);
+ edgeToTriangle[index][COUNT(eLnext)] = triCount;
+ }
+
triCount++;
}
}
@@ -660,7 +700,28 @@
}while( e != eStart );
}
- delaunay->numTriangles = triCount;
+ delaunay->numTriangles = triCount;
+
+ if( delaunay->attributes->BuildTriangleNeighbours ){
+ int *triangleNeighbourCount = NULL;
+
+ triangleNeighbourCount = Memory_Alloc_Array_Unnamed( int, delaunay->numFaces );
+ memset( triangleNeighbourCount, 0, sizeof( int ) * delaunay->numFaces );
+
+ for( i=0; i<delaunay->qp->numQuadEdges; i++ ){
+ if( IS_FREE( (QuadEdgeRef)(&(delaunay->qp->quadEdges[i])) ) ) continue;
+
+
+ if( edgeToTriangle[i][0] != delaunay->numFaces )
+ delaunay->triangleNeighbours[edgeToTriangle[i][0]][triangleNeighbourCount[edgeToTriangle[i][0]]++] = edgeToTriangle[i][1];
+
+ if( edgeToTriangle[i][1] > delaunay->numFaces )
+ delaunay->triangleNeighbours[edgeToTriangle[i][1]][triangleNeighbourCount[edgeToTriangle[i][1]]++] = edgeToTriangle[i][0];
+ }
+
+ Memory_Free( edgeToTriangle );
+ Memory_Free( triangleNeighbourCount );
+ }
}
#define NEIGHBOURS_TAG 1<<4
@@ -819,6 +880,11 @@
pd->triangleIndices = Memory_Alloc_Array_Unnamed( int*, sizeof(int*) * globalNumTriangles );
pd->triangleIndices[0] = Memory_Alloc_Array_Unnamed( int, sizeof(int) * globalNumTriangles*3 );
+ if ( pd->attributes->BuildTriangleNeighbours ){
+ pd->triangleNeighbours = Memory_Alloc_Array_Unnamed( int*, sizeof(int*) * globalNumTriangles );
+ pd->triangleNeighbours[0] = Memory_Alloc_Array_Unnamed( int, sizeof(int) * globalNumTriangles*3 );
+ }
+
triCountArray[0] = triCount;
for( i=1; i<pd->numProcs; i++ ){
MPI_Recv( &(triCountArray[i]), 1, MPI_INT, i, DATA_TAG, MPI_COMM_WORLD, &st );
@@ -826,15 +892,29 @@
for( i=0; i<globalNumTriangles; i++ ){
pd->triangleIndices[i] = pd->triangleIndices[0] + i*3;
+
+ if ( pd->attributes->BuildTriangleNeighbours ){
+ pd->triangleNeighbours[i] = pd->triangleNeighbours[0] + i*3;
+ }
}
for(j=0; j<triCountArray[0]; j++){
memcpy( pd->triangleIndices[j], triIndices[j], sizeof(int)*3 );
+
+ if ( pd->attributes->BuildTriangleNeighbours ){
+ memcpy( pd->triangleNeighbours[j], pd->localTriangulation->triangleNeighbours[j], sizeof(int)*3 );
+ }
}
for( i=1; i<pd->numProcs; i++ ){
for( count=0; count < triCountArray[i]; count++ ){
- MPI_Recv( pd->triangleIndices[j++], 3, MPI_INT, i, DATA_TAG, MPI_COMM_WORLD, &st );
+ MPI_Recv( pd->triangleIndices[j], 3, MPI_INT, i, DATA_TAG, MPI_COMM_WORLD, &st );
+
+ if ( pd->attributes->BuildTriangleNeighbours ){
+ MPI_Recv( pd->triangleNeighbours[j], 3, MPI_INT, i, DATA_TAG, MPI_COMM_WORLD, &st );
+ }
+
+ j++;
}
}
@@ -852,6 +932,10 @@
MPI_Send( &triCount, 1, MPI_INT, MASTER_PROC, DATA_TAG, MPI_COMM_WORLD );
for( j=0; j<triCount; j++ ){
MPI_Send( triIndices[j], 3, MPI_INT, MASTER_PROC, DATA_TAG, MPI_COMM_WORLD );
+
+ if ( pd->attributes->BuildTriangleNeighbours ){
+ MPI_Send( pd->localTriangulation->triangleNeighbours[j], 3, MPI_INT, MASTER_PROC, DATA_TAG, MPI_COMM_WORLD );
+ }
}
}
Modified: long/3D/Gale/trunk/src/StGermain/Discretisation/Geometry/tests/testParallelDelaunay.c
===================================================================
--- long/3D/Gale/trunk/src/StGermain/Discretisation/Geometry/tests/testParallelDelaunay.c 2006-08-18 00:16:18 UTC (rev 4308)
+++ long/3D/Gale/trunk/src/StGermain/Discretisation/Geometry/tests/testParallelDelaunay.c 2006-08-18 00:16:22 UTC (rev 4309)
@@ -122,6 +122,7 @@
attr.BuildBoundingTriangle = 0;
attr.BuildTriangleIndices = 1;
+ attr.BuildTriangleNeighbours= 1;
attr.CreateVoronoiVertices = 1;
attr.CalculateVoronoiSides = 1;
attr.CalculateVoronoiSurfaceArea = 1;
More information about the cig-commits
mailing list