Optimized particlePool handling
This commit is contained in:
@@ -177,7 +177,7 @@ void freeParticles(ParticleTracer* particletracer)
|
||||
free(particletracer->linSpaceLine);
|
||||
}
|
||||
|
||||
void writeParticles(ParticleTracer* particletracer, Solver* solver)
|
||||
void writeParticles(ParticleTracer* particletracer)
|
||||
{
|
||||
VtkOptions opts = { .particletracer = particletracer };
|
||||
|
||||
@@ -256,7 +256,7 @@ void printParticleTracerParameters(ParticleTracer* particletracer)
|
||||
printf("\tdt : %.2f, dx : %.2f, dy : %.2f, dz : %.2f\n", particletracer->dt, particletracer->dx, particletracer->dy, particletracer->dz);
|
||||
}
|
||||
|
||||
void trace(ParticleTracer* particletracer, Solver* solver, double* u, double* v, double* w, double time)
|
||||
void trace(ParticleTracer* particletracer, double* u, double* v, double* w, double time)
|
||||
{
|
||||
if (time >= particletracer->startTime)
|
||||
{
|
||||
@@ -268,25 +268,34 @@ void trace(ParticleTracer* particletracer, Solver* solver, double* u, double* v,
|
||||
}
|
||||
if( (time - particletracer->lastWriteTime) >= particletracer->writeTimePeriod)
|
||||
{
|
||||
activeParticleChecker(particletracer);
|
||||
writeParticles(particletracer, solver);
|
||||
writeParticles(particletracer);
|
||||
particletracer->lastWriteTime = time;
|
||||
|
||||
}
|
||||
advanceParticles(particletracer, u, v, w, time);
|
||||
compress(particletracer);
|
||||
particletracer->lastUpdateTime = time;
|
||||
}
|
||||
}
|
||||
|
||||
void activeParticleChecker(ParticleTracer* particletracer)
|
||||
void compress(ParticleTracer* particletracer)
|
||||
{
|
||||
particletracer->activeParticles = 0;
|
||||
Particle* particlePool = particletracer->particlePool;
|
||||
for (int i = 0; i < particletracer->totalParticles; ++i)
|
||||
Particle* memPool = particletracer->particlePool;
|
||||
Particle tempPool[particletracer->totalParticles];
|
||||
int totalParticles = 0;
|
||||
|
||||
for(int i=0; i < particletracer->totalParticles; ++i)
|
||||
{
|
||||
if(particlePool[i].flag == true)
|
||||
if(memPool[i].flag == 1)
|
||||
{
|
||||
++(particletracer->activeParticles);
|
||||
tempPool[totalParticles].x = memPool[i].x;
|
||||
tempPool[totalParticles].y = memPool[i].y;
|
||||
tempPool[totalParticles].z = memPool[i].z;
|
||||
tempPool[totalParticles].flag = memPool[i].flag;
|
||||
++totalParticles;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
particletracer->totalParticles = totalParticles;
|
||||
memcpy(particletracer->particlePool, tempPool, totalParticles*sizeof(Particle));
|
||||
}
|
||||
|
Reference in New Issue
Block a user