[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