[cig-commits] r4140 - in long/3D/Gale/trunk/src/StGermain: .
Discretisation/Geometry/src Discretisation/Geometry/tests
walter at geodynamics.org
walter at geodynamics.org
Tue Aug 1 01:53:20 PDT 2006
Author: walter
Date: 2006-08-01 01:53:20 -0700 (Tue, 01 Aug 2006)
New Revision: 4140
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/Delaunay.h
long/3D/Gale/trunk/src/StGermain/Discretisation/Geometry/tests/testDelaunay.c
Log:
r2606 at earth: boo | 2006-08-01 01:50:35 -0700
r2585 at earth (orig r3708): RaquibulHassan | 2006-07-26 02:47:31 -0700
Adding functionality to the Delaunay class to be able to identify the neighbouring
triangles of each triangle. The neighbouring triangles of each trianglular element are
a requirement for Finite element analysis.
Property changes on: long/3D/Gale/trunk/src/StGermain
___________________________________________________________________
Name: svk:merge
- 1ef209d2-b310-0410-a72d-e20c9eb0015c:/cig:2605
afb6c753-b9d0-0310-b4e7-dbd8d91cdd35:/trunk/StGermain:3707
+ 1ef209d2-b310-0410-a72d-e20c9eb0015c:/cig:2606
afb6c753-b9d0-0310-b4e7-dbd8d91cdd35:/trunk/StGermain:3708
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-01 08:53:16 UTC (rev 4139)
+++ long/3D/Gale/trunk/src/StGermain/Discretisation/Geometry/src/Delaunay.c 2006-08-01 08:53:20 UTC (rev 4140)
@@ -609,6 +609,8 @@
Site *sites = NULL;
int maxEdges = 0;
int **triIndices = NULL;
+ int **edgeToTriangle = NULL;
+ int index = 0;
assert( delaunay );
@@ -616,9 +618,34 @@
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;
@@ -653,6 +680,16 @@
triIndices[triCount][0] = (((Site*)ORG(e))->id);
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;
+
+ 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,6 +697,16 @@
triIndices[triCount][0] = (((Site*)ORG(e))->id);
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;
+
+ 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++;
}
@@ -673,6 +720,27 @@
}
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 );
+ }
}
/* Function for calculating voronoi vertices */
Modified: long/3D/Gale/trunk/src/StGermain/Discretisation/Geometry/src/Delaunay.h
===================================================================
--- long/3D/Gale/trunk/src/StGermain/Discretisation/Geometry/src/Delaunay.h 2006-08-01 08:53:16 UTC (rev 4139)
+++ long/3D/Gale/trunk/src/StGermain/Discretisation/Geometry/src/Delaunay.h 2006-08-01 08:53:20 UTC (rev 4140)
@@ -48,6 +48,7 @@
typedef struct DelaunayAttributes_t{
int BuildBoundingTriangle;
int BuildTriangleIndices;
+ int BuildTriangleNeighbours;
int CreateVoronoiVertices;
int CalculateVoronoiSides;
int CalculateVoronoiSurfaceArea;
@@ -75,6 +76,7 @@
int numTriangles; \
int numFaces; \
int **triangleIndices; \
+ int **triangleNeighbours; \
int numVoronoiVertices; \
int *numNeighbours; \
int **neighbours; \
Modified: long/3D/Gale/trunk/src/StGermain/Discretisation/Geometry/tests/testDelaunay.c
===================================================================
--- long/3D/Gale/trunk/src/StGermain/Discretisation/Geometry/tests/testDelaunay.c 2006-08-01 08:53:16 UTC (rev 4139)
+++ long/3D/Gale/trunk/src/StGermain/Discretisation/Geometry/tests/testDelaunay.c 2006-08-01 08:53:20 UTC (rev 4140)
@@ -110,8 +110,9 @@
pointsType p;
Dictionary *dictionary = Dictionary_New();
-
+ 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