Optimized particlePool handling

This commit is contained in:
2023-08-21 10:40:48 +02:00
parent e00e375b6a
commit ada0381f79
47 changed files with 22761 additions and 47 deletions

View File

@@ -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));
}