[cig-commits] commit: Rejigged PeriodicBoundariesManager component.

Mercurial hg at geodynamics.org
Mon Feb 1 15:30:51 PST 2010


changeset:   328:ebdcd861f4ed
branch:      pcu_rejig
user:        JericoRevote
date:        Tue Nov 24 17:50:37 2009 +1100
files:       MaterialPoints/src/PeriodicBoundariesManager.c MaterialPoints/src/PeriodicBoundariesManager.h MaterialPoints/src/SwarmAdvector.c
description:
Rejigged PeriodicBoundariesManager component.


diff -r 01b8e5dbf9a4 -r ebdcd861f4ed MaterialPoints/src/PeriodicBoundariesManager.c
--- a/MaterialPoints/src/PeriodicBoundariesManager.c	Tue Nov 24 16:51:44 2009 +1100
+++ b/MaterialPoints/src/PeriodicBoundariesManager.c	Tue Nov 24 17:50:37 2009 +1100
@@ -63,6 +63,21 @@ const Type PeriodicBoundariesManager_Typ
 const Type PeriodicBoundariesManager_Type = "PeriodicBoundariesManager";
 
 /* Constructors ------------------------------------------------------------------------------------------------*/
+PeriodicBoundariesManager* PeriodicBoundariesManager_New( 
+	Name						name,
+	PICelleratorContext*	context,
+	Mesh*						mesh, 
+	Swarm*					swarm,
+	Dictionary*				dictionary )
+{
+	PeriodicBoundariesManager* self = _PeriodicBoundariesManager_DefaultNew( name );
+
+	self->isConstructed = True;
+	_PeriodicBoundariesManager_Init( self, context, mesh, swarm, dictionary );
+
+	return self;
+}	
+
 void* _PeriodicBoundariesManager_DefaultNew( Name name ) {
 	return (void*) _PeriodicBoundariesManager_New(
 		sizeof(PeriodicBoundariesManager),
@@ -77,95 +92,35 @@ void* _PeriodicBoundariesManager_Default
 		_PeriodicBoundariesManager_Execute,
 		_PeriodicBoundariesManager_Destroy,
 		name,
-		False,
+		NON_GLOBAL,
 		NULL,
 		NULL,
 		NULL);
 }
 
-PeriodicBoundariesManager* PeriodicBoundariesManager_New( 
-		Name                        name,
-		Mesh*			    mesh, 
-		Swarm*                      swarm,
-		Dictionary*                 dictionary )
-{
-	return _PeriodicBoundariesManager_New(
-		sizeof(PeriodicBoundariesManager),
-		PeriodicBoundariesManager_Type,
-		_PeriodicBoundariesManager_Delete,
-		_PeriodicBoundariesManager_Print,
-		_PeriodicBoundariesManager_Copy, 
-		_PeriodicBoundariesManager_DefaultNew,
-		_PeriodicBoundariesManager_AssignFromXML,
-		_PeriodicBoundariesManager_Build,
-		_PeriodicBoundariesManager_Initialise,
-		_PeriodicBoundariesManager_Execute,
-		_PeriodicBoundariesManager_Destroy,
-		name,
-		True,
-		mesh, 
-		swarm,
-		dictionary );
-}	
-
-
-PeriodicBoundariesManager* _PeriodicBoundariesManager_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,
-		Mesh*				       mesh, 
-		Swarm*                                 swarm,
-		Dictionary*                            dictionary )		
-{
+PeriodicBoundariesManager* _PeriodicBoundariesManager_New( PERIODICBOUNDARIESMANAGER_DEFARGS ) {
 	PeriodicBoundariesManager* self;
 	
 	/* Allocate memory */
-	self = (PeriodicBoundariesManager*)_Stg_Component_New( 
-		sizeOfSelf, 
-		type, 
-		_delete, 
-		_print, 
-		_copy,
-		_defaultConstructor,
-		_construct,
-		_build,
-		_initialise,
-		_execute,
-		_destroy,
-		name,
-		initFlag );
+	self = (PeriodicBoundariesManager*)_Stg_Component_New( STG_COMPONENT_PASSARGS );
 	
 	/* General info */
 	
 	/* Virtual info */
 	
-	if( initFlag ){
-		_PeriodicBoundariesManager_Init( self, mesh, swarm, dictionary );
-	}
-	
 	return self;
 }
 
-
 void _PeriodicBoundariesManager_Init(
-		void*             periodicBCsManager,
-		Mesh*		  mesh, 
-		Swarm*            swarm,
-		Dictionary*       dictionary )
+	void*						periodicBCsManager,
+	PICelleratorContext*	context,
+	Mesh*						mesh, 
+	Swarm*					swarm,
+	Dictionary*				dictionary )
 {
 	PeriodicBoundariesManager* self = (PeriodicBoundariesManager*)periodicBCsManager;
 
-	self->isConstructed = True;
+	self->context = context;
 	self->dictionary = dictionary;
 	self->mesh = mesh;
 	self->swarm = swarm;
@@ -176,29 +131,26 @@ void _PeriodicBoundariesManager_Init(
 	self->debug = Journal_Register( Debug_Type, self->type );
 }
 
-
 void _PeriodicBoundariesManager_AssignFromXML( void* periodicBCsManager, Stg_ComponentFactory* cf, void* data ) {
 	PeriodicBoundariesManager*	self = (PeriodicBoundariesManager*)periodicBCsManager;
-	Dictionary*			dictionary = NULL;
-	Mesh*				mesh = NULL;
-	Swarm*                          swarm = NULL;
+	Dictionary*						dictionary = NULL;
+	Mesh*								mesh = NULL;
+	Swarm*							swarm = NULL;
+	PICelleratorContext*			context;
 
-	self->context = Stg_ComponentFactory_ConstructByKey( cf, self->name, "Context", PICelleratorContext, False, data );
-	if( !self->context ) 
-		self->context = Stg_ComponentFactory_ConstructByName( cf, "context", PICelleratorContext, True, data );
+	context = Stg_ComponentFactory_ConstructByKey( cf, self->name, "Context", PICelleratorContext, False, data );
+	if( !context ) 
+		context = Stg_ComponentFactory_ConstructByName( cf, "context", PICelleratorContext, True, data );
 
 	dictionary = Dictionary_GetDictionary( cf->componentDict, self->name );
-	mesh =  Stg_ComponentFactory_ConstructByKey(  cf,  self->name,  "mesh", Mesh,  True, data  ) ;
-	swarm =  Stg_ComponentFactory_ConstructByKey(  cf,  self->name,  "Swarm", Swarm,  True, data  ) ;
+	mesh = Stg_ComponentFactory_ConstructByKey( cf, self->name, "mesh", Mesh, True, data );
+	swarm = Stg_ComponentFactory_ConstructByKey( cf, self->name, "Swarm", Swarm, True, data );
 
-	_PeriodicBoundariesManager_Init( self, mesh, swarm, dictionary );
+	_PeriodicBoundariesManager_Init( self, context, mesh, swarm, dictionary );
 }
-
 
 void _PeriodicBoundariesManager_Delete( void* perBCsManager ) {
 	PeriodicBoundariesManager* self = (PeriodicBoundariesManager*)perBCsManager;
-	
-	Memory_Free( self->boundaries );
 	
 	/* Stg_Class_Delete parent */
 	_Stg_Component_Delete( self );
@@ -207,8 +159,8 @@ void _PeriodicBoundariesManager_Delete( 
 /* Virtual Functions -------------------------------------------------------------------------------------------------------------*/
 
 void _PeriodicBoundariesManager_Print( void* perBCsManager, Stream* stream ) {
-	PeriodicBoundariesManager* self = (PeriodicBoundariesManager*)perBCsManager;
-	Index		perBoundary_I = 0;
+	PeriodicBoundariesManager*	self = (PeriodicBoundariesManager*)perBCsManager;
+	Index								perBoundary_I = 0;
 	
 	/* General info */
 	Journal_Printf( stream, "PeriodicBoundariesManager (ptr): %p\n", self );
@@ -218,6 +170,7 @@ void _PeriodicBoundariesManager_Print( v
 
 	Journal_Printf( stream, "%d periodic boundaries registered: %p\n", self );
 	Stream_Indent( stream );
+
 	for ( perBoundary_I = 0; perBoundary_I < self->count; perBoundary_I++ ) {
 		Journal_Printf( stream, "Boundary %d: Axis %d, Min=%f, Max=%f\n", perBoundary_I,
 			self->boundaries[perBoundary_I].axis,
@@ -227,12 +180,11 @@ void _PeriodicBoundariesManager_Print( v
 	Stream_UnIndent( stream );
 }
 
-
 void* _PeriodicBoundariesManager_Copy( void* periodicBCsManager, void* dest, Bool deep, Name nameExt, PtrMap* ptrMap ) {
-	PeriodicBoundariesManager*   self = (PeriodicBoundariesManager*)periodicBCsManager;
-	PeriodicBoundariesManager*   newPeriodicBCsManager;
-	PtrMap*	                     map = ptrMap;
-	Bool                         ownMap = False;
+	PeriodicBoundariesManager*	self = (PeriodicBoundariesManager*)periodicBCsManager;
+	PeriodicBoundariesManager*	newPeriodicBCsManager;
+	PtrMap*							map = ptrMap;
+	Bool								ownMap = False;
 	
 	if( !map ) {
 		map = PtrMap_New( 10 );
@@ -250,8 +202,7 @@ void* _PeriodicBoundariesManager_Copy( v
 		newPeriodicBCsManager->mesh = (Mesh*)Stg_Class_Copy( self->mesh, NULL, deep, nameExt, map );
 		newPeriodicBCsManager->swarm = (Swarm*)Stg_Class_Copy( self->swarm, NULL, deep, nameExt, map );
 		newPeriodicBCsManager->debug = self->debug;
-		newPeriodicBCsManager->boundaries = Memory_Alloc_Array( PeriodicBoundary, self->size,
-			"PeriodicBoundaries" );
+		newPeriodicBCsManager->boundaries = Memory_Alloc_Array( PeriodicBoundary, self->size, "PeriodicBoundaries" );
 		memcpy( newPeriodicBCsManager->boundaries, self->boundaries, sizeof(PeriodicBoundary)*self->count );	
 	}
 	else {
@@ -267,12 +218,7 @@ void* _PeriodicBoundariesManager_Copy( v
 	}
 	
 	return (void*)newPeriodicBCsManager;
-
-
-	
-	return NULL;
 }
-
 
 void _PeriodicBoundariesManager_Build( void* periodicBCsManager, void* data ) {	
 	PeriodicBoundariesManager* self = (PeriodicBoundariesManager*)periodicBCsManager;
@@ -320,11 +266,7 @@ void _PeriodicBoundariesManager_Build( v
 				PeriodicBoundariesManager_AddPeriodicBoundary( self, dim_I );
 		}		
 	}
-
-
-
 }
-
 
 void _PeriodicBoundariesManager_Initialise( void* periodicBCsManager, void* data ) {	
 }
@@ -333,14 +275,17 @@ void _PeriodicBoundariesManager_Execute(
 }
 
 void _PeriodicBoundariesManager_Destroy( void* periodicBCsManager, void* data ) {	
+	PeriodicBoundariesManager* self = (PeriodicBoundariesManager*)periodicBCsManager;
+
+	Memory_Free( self->boundaries );
 }
 
 /* Public Functions -------------------------------------------------------------------------------------------------------------*/
 
 void PeriodicBoundariesManager_AddPeriodicBoundary( void* periodicBCsManager, Axis axis ) {
 	PeriodicBoundariesManager*	self = (PeriodicBoundariesManager*)periodicBCsManager;	
-	PeriodicBoundary*		newPeriodicBoundary;
-	double				min[3], max[3];
+	PeriodicBoundary*				newPeriodicBoundary;
+	double							min[3], max[3];
 
 	Mesh_GetGlobalCoordRange( self->mesh, min, max );
 	
@@ -348,6 +293,7 @@ void PeriodicBoundariesManager_AddPeriod
 		self->size += self->delta;
 		self->boundaries = Memory_Realloc_Array( self->boundaries, PeriodicBoundary, self->size );
 	}
+
 	newPeriodicBoundary = &self->boundaries[self->count];
 	newPeriodicBoundary->axis = axis;
 	newPeriodicBoundary->minWall = min[axis];
@@ -357,49 +303,41 @@ void PeriodicBoundariesManager_AddPeriod
 	self->count++;
 }
 
-
 void PeriodicBoundariesManager_UpdateParticle( void* periodicBCsManager, Particle_Index lParticle_I ) {
-	Axis				boundaryAxis;	
+	Axis								boundaryAxis;	
 	PeriodicBoundariesManager*	self = (PeriodicBoundariesManager*)periodicBCsManager;
-	double				difference = 0.0;
-	GlobalParticle*                 particle = NULL;
-	Index				perBoundary_I = 0;
-	PeriodicBoundary*		perBoundary = NULL;
+	double							difference = 0.0;
+	GlobalParticle*				particle = NULL;
+	Index								perBoundary_I = 0;
+	PeriodicBoundary*				perBoundary = NULL;
 
 	Journal_DPrintfL( self->debug, 2, "In %s:\n", __func__ );
 	Stream_Indent( self->debug );
 
 	particle = (GlobalParticle*)Swarm_ParticleAt( self->swarm, lParticle_I );
 
-	Journal_DPrintfL( self->debug, 2, "Checking particle %d at (%.4g,%.4g,%.4g)\n", lParticle_I,
-		particle->coord[0], particle->coord[1], particle->coord[2] );
+	Journal_DPrintfL( self->debug, 2, "Checking particle %d at (%.4g,%.4g,%.4g)\n", lParticle_I, particle->coord[0], particle->coord[1], particle->coord[2] );
 
 	for ( perBoundary_I = 0; perBoundary_I < self->count; perBoundary_I++ ) {
-
 		perBoundary = &self->boundaries[perBoundary_I];
 		boundaryAxis = perBoundary->axis;
 
 		Journal_DPrintfL( self->debug, 2, "Checking axis %d:\n", boundaryAxis );
+		Stream_Indent( self->debug );
 
-			
-		Stream_Indent( self->debug );
 		if ( particle->coord[boundaryAxis] < perBoundary->minWall ) {
 			Journal_DPrintfL( self->debug, 3, "coord is < min wall %.4f:\n", perBoundary->minWall );
 			difference = perBoundary->minWall - particle->coord[boundaryAxis];
 			particle->coord[boundaryAxis] = perBoundary->maxWall - difference;
 			perBoundary->particlesUpdatedMinEndCount++;
-			Journal_DPrintfL( self->debug, 3, "moving to (%.4f,%.4f,%.4f).\n",
-				particle->coord[I_AXIS], particle->coord[J_AXIS],
-				particle->coord[K_AXIS] );
+			Journal_DPrintfL( self->debug, 3, "moving to (%.4f,%.4f,%.4f).\n", particle->coord[I_AXIS], particle->coord[J_AXIS], particle->coord[K_AXIS] );
 		}
 		else if ( particle->coord[perBoundary->axis] > perBoundary->maxWall ) {
 			Journal_DPrintfL( self->debug, 3, "coord is > max wall %.4f:\n", perBoundary->maxWall );
 			difference = particle->coord[boundaryAxis] - perBoundary->maxWall; 
 			particle->coord[boundaryAxis] = perBoundary->minWall + difference;
 			perBoundary->particlesUpdatedMaxEndCount++;
-			Journal_DPrintfL( self->debug, 3, "moving to (%.4f,%.4f,%.4f).\n",
-				particle->coord[I_AXIS], particle->coord[J_AXIS],
-				particle->coord[K_AXIS] );
+			Journal_DPrintfL( self->debug, 3, "moving to (%.4f,%.4f,%.4f).\n", particle->coord[I_AXIS], particle->coord[J_AXIS], particle->coord[K_AXIS] );
 		}
 		Stream_UnIndent( self->debug );
 	}	
@@ -410,11 +348,12 @@ void PeriodicBoundariesManager_UpdatePar
 	the only way I can see given this func is part of the SwarmAdvector intermediate. Should really be a 
 	function on this class that updates all the particles. -- Main.PatrickSunter 15 May 2006 */
 	if ( lParticle_I == (self->swarm->particleLocalCount-1) ) {
-		PeriodicBoundary*      boundary = NULL;
-		Index                  perB_I;
+		PeriodicBoundary*	boundary = NULL;
+		Index					perB_I;
 	
 		Journal_DPrintfL( self->debug, 1, "PeriodicBoundariesManager total particles updated:\n" );
 		Stream_Indent( self->debug );
+
 		for ( perB_I = 0; perB_I < self->count; perB_I++ ) {
 			boundary = &self->boundaries[perB_I];
 
diff -r 01b8e5dbf9a4 -r ebdcd861f4ed MaterialPoints/src/PeriodicBoundariesManager.h
--- a/MaterialPoints/src/PeriodicBoundariesManager.h	Tue Nov 24 16:51:44 2009 +1100
+++ b/MaterialPoints/src/PeriodicBoundariesManager.h	Tue Nov 24 17:50:37 2009 +1100
@@ -58,59 +58,57 @@
 	extern const Type PeriodicBoundariesManager_Type;
 
 	typedef struct PeriodicBoundary {
-		Axis		axis;	/* Which plane the BC is in */
-		double		minWall;
-		double		maxWall;
-		unsigned int    particlesUpdatedMinEndCount;
-		unsigned int    particlesUpdatedMaxEndCount;
+		Axis				axis; /* Which plane the BC is in */
+		double			minWall;
+		double			maxWall;
+		unsigned int	particlesUpdatedMinEndCount;
+		unsigned int	particlesUpdatedMaxEndCount;
 	} PeriodicBoundary;
 
 	#define __PeriodicBoundariesManager \
 		__Stg_Component \
 		PICelleratorContext*	context; \
 		\
-		Dictionary*		dictionary; \
-		Mesh*			mesh; \
-		Index			count; \
-		Index			size; \
-		Index			delta; \
-		PeriodicBoundary*	boundaries; \
-		Swarm*			swarm; \
-		Stream*                 debug; \
+		Dictionary*				dictionary; \
+		Mesh*						mesh; \
+		Index						count; \
+		Index						size; \
+		Index						delta; \
+		PeriodicBoundary*		boundaries; \
+		Swarm*					swarm; \
+		Stream*					debug; 
 
 	struct PeriodicBoundariesManager { __PeriodicBoundariesManager };
+
+	#define PERIODICBOUNDARIESMANAGER_DEFARGS \
+		STG_COMPONENT_DEFARGS, \
+			Mesh*			mesh, \
+			Swarm*		swarm, \
+			Dictionary*	dictionary 
+
+	#define PERIODICBOUNDARIESMANAGER_PASSARGS \
+		STG_COMPONENT_PASSARGS, \
+			mesh, \
+			swarm, \
+			dictionary 
 
 	void* _PeriodicBoundariesManager_DefaultNew( Name name );
 
 	PeriodicBoundariesManager* PeriodicBoundariesManager_New( 
-		Name                    			name,
+		Name						name,
+		PICelleratorContext*	context,
 		Mesh*						mesh, 
-		Swarm*                                          swarm,
-		Dictionary*					dictionary );
+		Swarm*					swarm,
+		Dictionary*				dictionary );
 
-	PeriodicBoundariesManager* _PeriodicBoundariesManager_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,
-		Mesh*				       mesh, 
-		Swarm*                                 swarm,
-		Dictionary*                            dictionary );
+	PeriodicBoundariesManager* _PeriodicBoundariesManager_New( PERIODICBOUNDARIESMANAGER_DEFARGS );
 
 	void _PeriodicBoundariesManager_Init(
-		void*             periodicBCsManager,
-		Mesh*		  mesh, 
-		Swarm*            swarm,
-		Dictionary*       dictionary );
+		void*						periodicBCsManager,
+		PICelleratorContext*	context,
+		Mesh*						mesh, 
+		Swarm*					swarm,
+		Dictionary*				dictionary );
 		
 	void _PeriodicBoundariesManager_AssignFromXML( void* periodicBCsManager, Stg_ComponentFactory* cf, void* data );
 	
diff -r 01b8e5dbf9a4 -r ebdcd861f4ed MaterialPoints/src/SwarmAdvector.c
--- a/MaterialPoints/src/SwarmAdvector.c	Tue Nov 24 16:51:44 2009 +1100
+++ b/MaterialPoints/src/SwarmAdvector.c	Tue Nov 24 17:50:37 2009 +1100
@@ -156,7 +156,7 @@ void _SwarmAdvector_Init(
 		CartesianGenerator* cartesianGenerator = (CartesianGenerator*) swarm->mesh->generator;
 		if ( cartesianGenerator->periodic[ I_AXIS ] || cartesianGenerator->periodic[ J_AXIS ] || cartesianGenerator->periodic[ K_AXIS ] ) {
 			/* Create a periodicBCsManager if there isn't one already */
-			periodicBCsManager = PeriodicBoundariesManager_New( "periodicBCsManager", (Mesh*)swarm->mesh, (Swarm*)swarm, NULL );
+			periodicBCsManager = PeriodicBoundariesManager_New( "periodicBCsManager", (PICelleratorContext*)self->context, (Mesh*)swarm->mesh, (Swarm*)swarm, NULL );
 		}
 	}	
 	self->periodicBCsManager = periodicBCsManager;



More information about the CIG-COMMITS mailing list