[cig-commits] r5814 - in long/3D/Gale/trunk/src/StGermain: . Discretisation/Swarm/src

walter at geodynamics.org walter at geodynamics.org
Wed Jan 17 16:10:46 PST 2007


Author: walter
Date: 2007-01-17 16:10:46 -0800 (Wed, 17 Jan 2007)
New Revision: 5814

Modified:
   long/3D/Gale/trunk/src/StGermain/
   long/3D/Gale/trunk/src/StGermain/Discretisation/Swarm/src/ParticleCommHandler.c
Log:
 r3305 at earth (orig r3975):  LukeHodkinson | 2007-01-16 22:40:37 -0800
 * Forgot to commit a pretty important part of the
   particle communication code. Adding it in.
 * Added the remaining code needed to actually
   do the communication. Should be back to normal
   now.
 



Property changes on: long/3D/Gale/trunk/src/StGermain
___________________________________________________________________
Name: svk:merge
   - 1ef209d2-b310-0410-a72d-e20c9eb0015c:/cig:3196
afb6c753-b9d0-0310-b4e7-dbd8d91cdd35:/branches/decomp3d/StGermain:3972
afb6c753-b9d0-0310-b4e7-dbd8d91cdd35:/trunk/StGermain:3899
   + 1ef209d2-b310-0410-a72d-e20c9eb0015c:/cig:3196
afb6c753-b9d0-0310-b4e7-dbd8d91cdd35:/branches/decomp3d/StGermain:3975
afb6c753-b9d0-0310-b4e7-dbd8d91cdd35:/trunk/StGermain:3899

Modified: long/3D/Gale/trunk/src/StGermain/Discretisation/Swarm/src/ParticleCommHandler.c
===================================================================
--- long/3D/Gale/trunk/src/StGermain/Discretisation/Swarm/src/ParticleCommHandler.c	2007-01-18 00:10:43 UTC (rev 5813)
+++ long/3D/Gale/trunk/src/StGermain/Discretisation/Swarm/src/ParticleCommHandler.c	2007-01-18 00:10:46 UTC (rev 5814)
@@ -133,7 +133,7 @@
 	ParticleCommHandler*	self = (ParticleCommHandler*)particleCommHandler;
 	unsigned		*nShadows;
 	GlobalParticle**	particles;
-	unsigned		nExternals, *externals;
+	/*unsigned		nExternals, *externals;*/
 
 	assert( self && Stg_CheckType( self, ParticleCommHandler ) );
 
@@ -143,8 +143,10 @@
 	ParticleCommHandler_BuildShadowParticles( self, &nShadows, &particles );
 	ParticleCommHandler_ExchangeShadowParticles( self, nShadows, particles );
 
+/*
 	ParticleCommHandler_BuildExternalParticles( self, &nExternals, &externals );
 	ParticleCommHandler_RemoveParticles( self, nExternals, externals );
+*/
 }
 
 
@@ -227,7 +229,8 @@
 	unsigned*		nRecvParticles;
 	GlobalParticle		**recvParticles;
 	double			particleSize;
-	unsigned		nbr_i;
+	unsigned		owningCell;
+	unsigned		nbr_i, p_i;
 
 	assert( self && Stg_CheckType( self, ParticleCommHandler ) );
 	assert( nShadows && particles );
@@ -245,14 +248,37 @@
 			       nShadows, particles, 
 			       &nRecvParticles, &recvParticles, 
 			       particleSize );
-	FreeArray( nRecvParticles );
-	for( nbr_i = 0; nbr_i < nbrInfo->procNbrCnt; nbr_i++ )
-		FreeArray( recvParticles[nbr_i] );
 
 	for( nbr_i = 0; nbr_i < nbrInfo->procNbrCnt; nbr_i++ )
 		FreeArray( particles[nbr_i] );
 	FreeArray( particles );
 	FreeArray( nShadows );
+
+	for( nbr_i = 0; nbr_i < nbrInfo->procNbrCnt; nbr_i++ ) {
+		if( swarm->particleLocalCount + nRecvParticles[nbr_i] >= swarm->particlesArraySize ) {
+			unsigned	nDeltas;
+
+			nDeltas = nRecvParticles[nbr_i] % self->swarm->particlesArrayDelta;
+			nDeltas += nDeltas ? 0 : 1;
+			swarm->particlesArraySize += nDeltas;
+			swarm->particles = Memory_Realloc_Array_Bytes( swarm->particles, 
+								       particleSize, 
+								       swarm->particlesArraySize );
+		}
+
+		for( p_i = 0; p_i < nRecvParticles[nbr_i]; p_i++ ) {
+			Swarm_CopyParticleOntoSwarm( swarm, swarm->particleLocalCount + p_i, recvParticles[nbr_i], p_i );
+			owningCell = CellLayout_CellOf( swarm->cellLayout, Swarm_ParticleAt( swarm, swarm->particleLocalCount + p_i ) );
+			assert( owningCell < swarm->cellDomainCount );
+			Swarm_AddParticleToCell( swarm, owningCell, swarm->particleLocalCount + p_i );
+		}
+		swarm->particleLocalCount += nRecvParticles[nbr_i];
+	}
+
+	FreeArray( nRecvParticles );
+	for( nbr_i = 0; nbr_i < nbrInfo->procNbrCnt; nbr_i++ )
+		FreeArray( recvParticles[nbr_i] );
+	FreeArray( recvParticles );
 }
 
 void ParticleCommHandler_BuildExternalParticles( ParticleCommHandler* self, unsigned* nExternals, unsigned** externals ) {
@@ -317,17 +343,14 @@
 		unsigned	r_i;
 
 		for( r_i = 0; r_i < nRems; r_i++ ) {
-			/* Must remove particle from owning cell. */
 			owningCell = Swarm_ParticleAt( self->swarm, rems[r_i] )->owningCell;
 			particleInd = Swarm_GetParticleIndexWithinCell( self->swarm, owningCell, rems[r_i] );
-			Swarm_RemoveParticleFromCell( swarm, owningCell, particleInd );
+			Swarm_RemoveParticleFromCell( self->swarm, owningCell, particleInd );
 
-			/* Next in line... */
 			remainInd = nRemaining - r_i - 1;
 			if( remaining[remainInd] < rems[r_i] )
 				break;
 
-			/* Fill a hole. */
 			Swarm_CopyParticleWithinSwarm( swarm, rems[r_i], remaining[remainInd] );
 			owningCell = Swarm_ParticleAt( self->swarm, rems[r_i] )->owningCell;
 			particleInd = Swarm_GetParticleIndexWithinCell( self->swarm, owningCell, remaining[remainInd] );



More information about the cig-commits mailing list