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

walter at geodynamics.org walter at geodynamics.org
Thu Jan 18 14:28:18 PST 2007


Author: walter
Date: 2007-01-18 14:28:17 -0800 (Thu, 18 Jan 2007)
New Revision: 5829

Modified:
   long/3D/Gale/trunk/src/StGermain/
   long/3D/Gale/trunk/src/StGermain/Discretisation/Swarm/src/ElementCellLayout.c
   long/3D/Gale/trunk/src/StGermain/Discretisation/Swarm/src/ParticleCommHandler.c
Log:
 r3318 at earth (orig r3979):  LukeHodkinson | 2007-01-17 23:55:45 -0800
 * Updated how the element cell layout calculates shadow
   information to reflect the new shared algorithms.
 * Fixed a logic bug in particle comms handler.
 



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:3978
afb6c753-b9d0-0310-b4e7-dbd8d91cdd35:/trunk/StGermain:3899
   + 1ef209d2-b310-0410-a72d-e20c9eb0015c:/cig:3196
afb6c753-b9d0-0310-b4e7-dbd8d91cdd35:/branches/decomp3d/StGermain:3979
afb6c753-b9d0-0310-b4e7-dbd8d91cdd35:/trunk/StGermain:3899

Modified: long/3D/Gale/trunk/src/StGermain/Discretisation/Swarm/src/ElementCellLayout.c
===================================================================
--- long/3D/Gale/trunk/src/StGermain/Discretisation/Swarm/src/ElementCellLayout.c	2007-01-18 22:28:15 UTC (rev 5828)
+++ long/3D/Gale/trunk/src/StGermain/Discretisation/Swarm/src/ElementCellLayout.c	2007-01-18 22:28:17 UTC (rev 5829)
@@ -395,6 +395,9 @@
 		unsigned*	sharers;
 		unsigned	s_i;
 
+		if( Mesh_SharedToDomain( self->mesh, nDims, n_i ) >= Mesh_GetLocalSize( self->mesh, nDims ) )
+			continue;
+
 		Mesh_GetSharers( self->mesh, nDims, n_i, 
 				 &nSharers, &sharers );
 		for( s_i = 0; s_i < nSharers; s_i++ )
@@ -423,7 +426,10 @@
 		unsigned*	sharers;
 		unsigned	s_i;
 
-		local = Mesh_SharedToLocal( self->mesh, nDims, n_i );
+		local = Mesh_SharedToDomain( self->mesh, nDims, n_i );
+		if( local >= Mesh_GetLocalSize( self->mesh, nDims ) )
+			continue;
+
 		Mesh_GetSharers( self->mesh, nDims, n_i, 
 				 &nSharers, &sharers );
 		for( s_i = 0; s_i < nSharers; s_i++ ) {

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 22:28:15 UTC (rev 5828)
+++ long/3D/Gale/trunk/src/StGermain/Discretisation/Swarm/src/ParticleCommHandler.c	2007-01-18 22:28:17 UTC (rev 5829)
@@ -141,7 +141,7 @@
 		return;
 
 	ParticleCommHandler_BuildShadowParticles( self, &nShadows, &particles );
-	ParticleCommHandler_ExchangeShadowParticles( self, nShadows, particles );
+	/*ParticleCommHandler_ExchangeShadowParticles( self, nShadows, particles );*/
 
 /*
 	ParticleCommHandler_BuildExternalParticles( self, &nExternals, &externals );
@@ -203,7 +203,7 @@
 		for( cell_i = 0; cell_i < shadowInfo->procShadowCnt[nbr_i]; cell_i++ ) {
 			for( p_i = 0; p_i < swarm->cellParticleCountTbl[shadowInfo->procShadowTbl[nbr_i][cell_i]]; p_i++ ) {
 				shds[nShds[nbr_i]] = swarm->cellParticleTbl[shadowInfo->procShadowTbl[nbr_i][cell_i]][p_i];
-				Swarm_CopyParticleOffSwarm( swarm, parts[nbr_i], nShds[nbr_i], shds[nShds[nbr_i]] );
+				/*Swarm_CopyParticleOffSwarm( swarm, parts[nbr_i], nShds[nbr_i], shds[nShds[nbr_i]] );*/
 				nShds[nbr_i]++;
 			}
 		}
@@ -254,15 +254,17 @@
 	FreeArray( particles );
 	FreeArray( nShadows );
 
+#if 0
 	for( nbr_i = 0; nbr_i < nbrInfo->procNbrCnt; nbr_i++ ) {
 		if( !nRecvParticles[nbr_i] )
 			continue;
 
-		if( swarm->particleLocalCount + nRecvParticles[nbr_i] >= swarm->particlesArraySize ) {
-			unsigned	nDeltas;
+		if( swarm->particleLocalCount + nRecvParticles[nbr_i] > swarm->particlesArraySize ) {
+			unsigned	diff, nDeltas;
 
-			nDeltas = nRecvParticles[nbr_i] % swarm->particlesArrayDelta;
-			nDeltas += nDeltas ? 0 : 1;
+			diff = (swarm->particleLocalCount + nRecvParticles[nbr_i]) - swarm->particlesArraySize;
+			nDeltas = diff / swarm->particlesArrayDelta;
+			nDeltas += (diff % swarm->particlesArrayDelta) ? 1 : 0;
 			swarm->particlesArraySize += nDeltas * swarm->particlesArrayDelta;
 			swarm->particles = Memory_Realloc_Array_Bytes( swarm->particles, 
 								       particleSize, 
@@ -277,6 +279,7 @@
 		}
 		swarm->particleLocalCount += nRecvParticles[nbr_i];
 	}
+#endif
 
 	FreeArray( nRecvParticles );
 	for( nbr_i = 0; nbr_i < nbrInfo->procNbrCnt; nbr_i++ )
@@ -352,12 +355,14 @@
 
 			remainInd = nRemaining - r_i - 1;
 			if( remaining[remainInd] < rems[r_i] )
-				break;
+				continue;
 
 			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] );
-			swarm->cellParticleTbl[owningCell][particleInd] = rems[r_i];
+			if( owningCell < swarm->cellDomainCount ) {
+				particleInd = Swarm_GetParticleIndexWithinCell( self->swarm, owningCell, remaining[remainInd] );
+				swarm->cellParticleTbl[owningCell][particleInd] = rems[r_i];
+			}
 		}
 
 		FreeArray( remaining );



More information about the cig-commits mailing list