[cig-commits] r3947 - in long/3D/Gale/trunk/src/StGermain: .
Discretisation/Geometry/src
walter at geodynamics.org
walter at geodynamics.org
Thu Jul 6 02:06:36 PDT 2006
Author: walter
Date: 2006-07-06 02:06:35 -0700 (Thu, 06 Jul 2006)
New Revision: 3947
Added:
long/3D/Gale/trunk/src/StGermain/Discretisation/Geometry/src/ParallelDelaunay.c
long/3D/Gale/trunk/src/StGermain/Discretisation/Geometry/src/ParallelDelaunay.h
Modified:
long/3D/Gale/trunk/src/StGermain/
long/3D/Gale/trunk/src/StGermain/Discretisation/Geometry/src/Delaunay.h
long/3D/Gale/trunk/src/StGermain/Discretisation/Geometry/src/types.h
Log:
r2475 at earth: boo | 2006-07-06 02:02:44 -0700
r2464 at earth (orig r3668): RaquibulHassan | 2006-07-04 02:53:10 -0700
Committing the skeleton of the parallelDelaunay class.
Property changes on: long/3D/Gale/trunk/src/StGermain
___________________________________________________________________
Name: svk:merge
- 1ef209d2-b310-0410-a72d-e20c9eb0015c:/cig:2474
afb6c753-b9d0-0310-b4e7-dbd8d91cdd35:/trunk/StGermain:3667
+ 1ef209d2-b310-0410-a72d-e20c9eb0015c:/cig:2475
afb6c753-b9d0-0310-b4e7-dbd8d91cdd35:/trunk/StGermain:3668
Modified: long/3D/Gale/trunk/src/StGermain/Discretisation/Geometry/src/Delaunay.h
===================================================================
--- long/3D/Gale/trunk/src/StGermain/Discretisation/Geometry/src/Delaunay.h 2006-07-06 09:06:33 UTC (rev 3946)
+++ long/3D/Gale/trunk/src/StGermain/Discretisation/Geometry/src/Delaunay.h 2006-07-06 09:06:35 UTC (rev 3947)
@@ -178,5 +178,6 @@
void Delaunay_BuildTriangleIndices( Delaunay *delaunay );
void Delaunay_BuildVoronoiVertices( Delaunay *delaunay );
void Delaunay_FindNeighbours( Delaunay *delaunay );
+ void Delaunay_FindMinMax( Site *sites, int count, float *minX, float *minY, float *maxX, float *maxY );
#endif /* __Discretisation_Geometry_Delaunay_h__ */
Added: long/3D/Gale/trunk/src/StGermain/Discretisation/Geometry/src/ParallelDelaunay.c
===================================================================
--- long/3D/Gale/trunk/src/StGermain/Discretisation/Geometry/src/ParallelDelaunay.c 2006-07-06 09:06:33 UTC (rev 3946)
+++ long/3D/Gale/trunk/src/StGermain/Discretisation/Geometry/src/ParallelDelaunay.c 2006-07-06 09:06:35 UTC (rev 3947)
@@ -0,0 +1,302 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+** Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+** Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+** Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+** Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+** Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+** Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+**
+** This library is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+** Lesser General Public License for more details.
+**
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+**
+*/
+/** \file
+** Role:
+** The ParallelDelaunay class computes the constrained delaunay triangulation of a set of points
+** in 2 Dimensions along with the voronoi diagram of the point-set.
+** Assumptions:
+**
+** Comments:
+**
+** The recursive divide and conquer algorithm has been implemented from the pseudo-code
+** given in "Primitives for the manipulation of general subdivisions and the computation
+** of voronoi diagrams" by Leonidas Guibas and Jorge Stolfi.
+** ACM transtactions on graphics, Vol. 4, No. 2, April 1985, Pages 74-123
+**
+**
+** $Id: ParallelDelaunay.c 3462 2006-02-19 06:53:24Z RaquibulHassan $
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#include <mpi.h>
+#include "Base/Base.h"
+
+
+#include "units.h"
+#include "types.h"
+#include "QuadEdge.h"
+#include "Delaunay.h"
+#include "ParallelDelaunay.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+#include <math.h>
+
+const Type ParallelDelaunay_Type="ParallelDelaunay";
+#define PI 3.1415926535897932384626
+
+ /*--------------------------------------------------------------------------------------------------------------------------
+ ** Constructors
+ */
+
+/** Create a ParallelDelaunay */
+ParallelDelaunay* ParallelDelaunay_DefaultNew( Name name )
+{
+ ParallelDelaunay *d = _ParallelDelaunay_New(
+ sizeof( ParallelDelaunay ),
+ ParallelDelaunay_Type,
+ _ParallelDelaunay_Delete,
+ _ParallelDelaunay_Print,
+ _ParallelDelaunay_Copy,
+ (void*)ParallelDelaunay_DefaultNew,
+ _ParallelDelaunay_Construct,
+ _ParallelDelaunay_Build,
+ _ParallelDelaunay_Initialise,
+ _ParallelDelaunay_Execute,
+ _ParallelDelaunay_Destroy,
+ name,
+ False,
+ NULL,
+ NULL,
+ 0,
+ NULL );
+
+ return d;
+}
+
+ParallelDelaunay* ParallelDelaunay_New(
+ Name name,
+ Dictionary* dictionary,
+ CoordF *sites,
+ int numSites,
+ DelaunayAttributes *attr )
+{
+ ParallelDelaunay *d = _ParallelDelaunay_New(
+ sizeof( ParallelDelaunay ),
+ ParallelDelaunay_Type,
+ _ParallelDelaunay_Delete,
+ _ParallelDelaunay_Print,
+ _ParallelDelaunay_Copy,
+ (void*)ParallelDelaunay_DefaultNew,
+ _ParallelDelaunay_Construct,
+ _ParallelDelaunay_Build,
+ _ParallelDelaunay_Initialise,
+ _ParallelDelaunay_Execute,
+ _ParallelDelaunay_Destroy,
+ name,
+ True,
+ dictionary,
+ sites,
+ numSites,
+ attr );
+
+ return d;
+}
+
+ /** Initialise a ParallelDelaunay */
+void ParallelDelaunay_Init(
+ ParallelDelaunay* self,
+ Name name,
+ Dictionary* dictionary,
+ CoordF *sites,
+ int numSites,
+ DelaunayAttributes *attr )
+{
+ self->type = ParallelDelaunay_Type;
+ self->_sizeOfSelf = sizeof( ParallelDelaunay );
+ self->_deleteSelf = False;
+ self->dictionary = dictionary;
+
+ self->_delete = _ParallelDelaunay_Delete;
+ self->_print = _ParallelDelaunay_Print;
+ self->_copy = _ParallelDelaunay_Copy;
+ self->_defaultConstructor = (void*)ParallelDelaunay_DefaultNew;
+ self->_construct = _ParallelDelaunay_Construct;
+ self->_build = _ParallelDelaunay_Build;
+ self->_initialise = _ParallelDelaunay_Initialise;
+ self->_execute = _ParallelDelaunay_Execute;
+ self->_destroy = _ParallelDelaunay_Destroy;
+
+ self->attributes = attr;
+ self->dictionary = dictionary;
+
+ if( self->attributes->BuildBoundingTriangle ){
+ self->numSites = numSites + 3;
+ }
+ else{
+ self->numSites = numSites;
+ }
+
+ self->numInputSites = numSites;
+ self->points = sites;
+ self->leftProc = 0;
+ self->rightProc = 0;
+ self->haloSites[0] = NULL;
+ self->haloSites[1] = NULL;
+ self->localTriangulation = NULL;
+
+ _Stg_Class_Init( (Stg_Class*)self );
+ _Stg_Object_Init( (Stg_Object*)self, name, NON_GLOBAL );
+ _Stg_Component_Init( (Stg_Component*)self );
+ _ParallelDelaunay_Init( self );
+}
+
+/** Creation implementation */
+ParallelDelaunay* _ParallelDelaunay_New(
+ SizeT _sizeOfSelf,
+ Type type,
+ Stg_Class_DeleteFunction* _delete,
+ Stg_Class_PrintFunction* _print,
+ Stg_Class_CopyFunction* _copy,
+ Stg_Component_DefaultConstructorFunction* _defaultConstructor,
+ Stg_Component_ConstructFunction* _construct,
+ Stg_Component_BuildFunction* _build,
+ Stg_Component_InitialiseFunction* _initialise,
+ Stg_Component_ExecuteFunction* _execute,
+ Stg_Component_DestroyFunction* _destroy,
+ Name name,
+ Bool initFlag,
+ Dictionary *dictionary,
+ CoordF *sites,
+ int numSites,
+ DelaunayAttributes *attr )
+{
+ ParallelDelaunay *self = NULL;
+
+ assert( _sizeOfSelf >= sizeof(ParallelDelaunay) );
+ self = (ParallelDelaunay*)_Delaunay_New( _sizeOfSelf, type, _delete, _print, _copy, _defaultConstructor,
+ _construct, _build, _initialise, _execute, _destroy, name, True, dictionary, sites, numSites, 0, attr );
+
+ self->points = sites;
+ self->leftProc = 0;
+ self->rightProc = 0;
+ self->haloSites[0] = NULL;
+ self->haloSites[1] = NULL;
+ self->localTriangulation = NULL;
+
+ if( initFlag ){
+ _ParallelDelaunay_Init( self );
+ }
+
+ return self;
+}
+
+void _ParallelDelaunay_Init( ParallelDelaunay* self )
+{
+ float maxX, minX, maxY, minY;
+ float centreX, centreY;
+ float radius;
+
+ assert( self );
+
+ centreX = 0; centreY = 0;
+
+ Delaunay_FindMinMax( ((Delaunay*)self)->sites, self->numSites, &minX, &minY, &maxX, &maxY );
+
+ radius = (sqrt((maxX - minX) * (maxX - minX) + (maxY - minY) * (maxY - minY)));
+
+ centreX = minX + (maxX - minX) / 2.0f;
+ centreY = minY + (maxY - minY) / 2.0f;
+
+ self->boundingTriangle[0][0] = centreX - tan(PI/3.0f)*radius;
+ self->boundingTriangle[0][1] = centreY - radius;
+
+ self->boundingTriangle[1][0] = centreX + tan(PI/3.0f)*radius;
+ self->boundingTriangle[1][1] = centreY - radius;
+
+ self->boundingTriangle[2][0] = centreX;
+ self->boundingTriangle[2][1] = centreY + radius/cos(PI/3.0f);
+}
+
+ /*--------------------------------------------------------------------------------------------------------------------------
+ ** Virtual functions
+ */
+
+/** Stg_Class_Delete() implementation */
+void _ParallelDelaunay_Delete( void* delaunay )
+{
+ ParallelDelaunay *self = (ParallelDelaunay*)delaunay;
+
+ assert( self );
+
+ _Stg_Component_Delete( self );
+}
+
+/** Stg_Class_Print() implementation */
+void _ParallelDelaunay_Print( void* delaunay, Stream* stream )
+{
+ ParallelDelaunay *self = ( ParallelDelaunay* )delaunay;
+
+ assert( self );
+ assert( stream );
+
+ _Delaunay_Print( (Delaunay*)self, stream );
+ Journal_Printf( stream, "ParallelDelaunay (ptr): (%p)\n", self );
+}
+
+void *_ParallelDelaunay_Copy( void* delaunay, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap )
+{
+ return NULL;
+}
+
+void _ParallelDelaunay_Construct( void* delaunay, Stg_ComponentFactory* cf )
+{
+
+}
+
+void _ParallelDelaunay_Build( void* delaunay, void* data )
+{
+
+}
+
+void _ParallelDelaunay_Initialise( void* delaunay, void* data )
+{
+
+}
+
+void _ParallelDelaunay_Execute( void* delaunay, void* data )
+{
+
+}
+
+void _ParallelDelaunay_Destroy( void* delaunay, void* data )
+{
+
+}
+
+ /*--------------------------------------------------------------------------------------------------------------------------
+ ** Private Member functions
+ */
+
+void ParallelDelaunay_BuildTriangleIndices( Delaunay *delaunay )
+{
+
+}
+
Added: long/3D/Gale/trunk/src/StGermain/Discretisation/Geometry/src/ParallelDelaunay.h
===================================================================
--- long/3D/Gale/trunk/src/StGermain/Discretisation/Geometry/src/ParallelDelaunay.h 2006-07-06 09:06:33 UTC (rev 3946)
+++ long/3D/Gale/trunk/src/StGermain/Discretisation/Geometry/src/ParallelDelaunay.h 2006-07-06 09:06:35 UTC (rev 3947)
@@ -0,0 +1,133 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+**
+** Copyright (C), 2003, Victorian Partnership for Advanced Computing (VPAC) Ltd, 110 Victoria Street, Melbourne, 3053, Australia.
+**
+** Authors:
+** Stevan M. Quenette, Senior Software Engineer, VPAC. (steve at vpac.org)
+** Patrick D. Sunter, Software Engineer, VPAC. (pds at vpac.org)
+** Luke J. Hodkinson, Computational Engineer, VPAC. (lhodkins at vpac.org)
+** Siew-Ching Tan, Software Engineer, VPAC. (siew at vpac.org)
+** Alan H. Lo, Computational Engineer, VPAC. (alan at vpac.org)
+** Raquibul Hassan, Computational Engineer, VPAC. (raq at vpac.org)
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License as published by the Free Software Foundation; either
+** version 2.1 of the License, or (at your option) any later version.
+**
+** This library is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+** Lesser General Public License for more details.
+**
+** You should have received a copy of the GNU Lesser General Public
+** License along with this library; if not, write to the Free Software
+** Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+**
+*/
+/** \file
+** Role:
+** Calculates the ParallelDelaunay triangulation and the voronoi diangram of a set of points.
+**
+** Assumptions:
+**
+** Comments:
+**
+** $Id: ParallelDelaunay.h 3462 2006-02-19 06:53:24Z Raquibul Hassan$
+**
+**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+
+#ifndef __Discretisation_Geometry_ParallelDelaunay_h__
+#define __Discretisation_Geometry_ParallelDelaunay_h__
+
+ /* Virtual function types */
+
+ /** Textual name of this class */
+ extern const Type ParallelDelaunay_Type;
+
+ /** ParallelDelaunay class contents (see Delaunay) */
+ #define __ParallelDelaunay \
+ __Delaunay \
+ CoordF *points; \
+ int leftProc; \
+ int rightProc; \
+ int numProcs; \
+ BTree *haloSites[2]; \
+ Delaunay *localTriangulation;
+ struct ParallelDelaunay { __ParallelDelaunay };
+
+
+ /*--------------------------------------------------------------------------------------------------------------------------
+ ** Constructors
+ */
+
+ /** Create a ParallelDelaunay */
+ ParallelDelaunay* ParallelDelaunay_DefaultNew( Name name );
+
+ ParallelDelaunay* ParallelDelaunay_New(
+ Name name,
+ Dictionary* dictionary,
+ CoordF *sites,
+ int numSites,
+ DelaunayAttributes *attr );
+
+ /** Initialise a ParallelDelaunay */
+ void ParallelDelaunay_Init(
+ ParallelDelaunay* self,
+ Name name,
+ Dictionary* dictionary,
+ CoordF *sites,
+ int numSites,
+ DelaunayAttributes *attr );
+
+ /** Creation implementation */
+ ParallelDelaunay* _ParallelDelaunay_New(
+ SizeT _sizeOfSelf,
+ Type type,
+ Stg_Class_DeleteFunction* _delete,
+ Stg_Class_PrintFunction* _print,
+ Stg_Class_CopyFunction* _copy,
+ Stg_Component_DefaultConstructorFunction* _defaultConstructor,
+ Stg_Component_ConstructFunction* _construct,
+ Stg_Component_BuildFunction* _build,
+ Stg_Component_InitialiseFunction* _initialise,
+ Stg_Component_ExecuteFunction* _execute,
+ Stg_Component_DestroyFunction* _destroy,
+ Name name,
+ Bool initFlag,
+ Dictionary *dictionary,
+ CoordF *sites,
+ int numSites,
+ DelaunayAttributes *attr );
+
+ void _ParallelDelaunay_Init( ParallelDelaunay* self );
+
+
+ /*--------------------------------------------------------------------------------------------------------------------------
+ ** Virtual functions
+ */
+
+ /** Stg_Class_Delete() implementation */
+ void _ParallelDelaunay_Delete( void* delaunay );
+
+ /** Stg_Class_Print() implementation */
+ void _ParallelDelaunay_Print( void* delaunay, Stream* stream );
+
+ void *_ParallelDelaunay_Copy( void* delaunay, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap );
+
+ void _ParallelDelaunay_Construct( void* delaunay, Stg_ComponentFactory* cf );
+
+ void _ParallelDelaunay_Build( void* delaunay, void* data );
+
+ void _ParallelDelaunay_Initialise( void* delaunay, void* data );
+
+ void _ParallelDelaunay_Execute( void* delaunay, void* data );
+
+ void _ParallelDelaunay_Destroy( void* delaunay, void* data );
+
+ /*--------------------------------------------------------------------------------------------------------------------------
+ ** Private Member functions
+ */
+ void ParallelDelaunay_BuildTriangleIndices( Delaunay *delaunay );
+
+#endif /* __Discretisation_Geometry_ParallelDelaunay_h__ */
Modified: long/3D/Gale/trunk/src/StGermain/Discretisation/Geometry/src/types.h
===================================================================
--- long/3D/Gale/trunk/src/StGermain/Discretisation/Geometry/src/types.h 2006-07-06 09:06:33 UTC (rev 3946)
+++ long/3D/Gale/trunk/src/StGermain/Discretisation/Geometry/src/types.h 2006-07-06 09:06:35 UTC (rev 3947)
@@ -99,6 +99,7 @@
typedef struct QuadEdgePool QuadEdgePool;
typedef struct VoronoiVertexPool VoronoiVertexPool;
typedef struct Delaunay Delaunay;
+ typedef struct ParallelDelaunay ParallelDelaunay;
#endif /* __Discretisation_Geometry_types_h__ */
More information about the cig-commits
mailing list