[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