[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