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

@@ -134,12 +134,9 @@ void writeParticles(ParticleTracer* particletracer, Solver* solver)
for (int i = 0; i < particletracer->totalParticles; ++i)
{
if(particlePool[i].flag == true)
{
double x = particlePool[i].x;
double y = particlePool[i].y;
fprintf(fp, "%f %f\n", x, y);
}
double x = particlePool[i].x;
double y = particlePool[i].y;
fprintf(fp, "%f %f\n", x, y);
}
fclose(fp);
@@ -217,6 +214,28 @@ void trace(ParticleTracer* particletracer, Solver* solver, double* u, double* v,
}
advanceParticles(particletracer, u, v, time);
compress(particletracer);
particletracer->lastUpdateTime = time;
}
}
void compress(ParticleTracer* particletracer)
{
Particle* memPool = particletracer->particlePool;
Particle tempPool[particletracer->totalParticles];
int totalParticles = 0;
for(int i=0; i < particletracer->totalParticles; ++i)
{
if(memPool[i].flag == 1)
{
tempPool[totalParticles].x = memPool[i].x;
tempPool[totalParticles].y = memPool[i].y;
tempPool[totalParticles].flag = memPool[i].flag;
++totalParticles;
}
}
particletracer->totalParticles = totalParticles;
memcpy(particletracer->particlePool, tempPool, totalParticles*sizeof(Particle));
}

View File

@@ -44,4 +44,5 @@ void writeParticles(ParticleTracer*, Solver*);
void printParticleTracerParameters(ParticleTracer*);
void printParticles(ParticleTracer*);
void trace(ParticleTracer*, Solver*, double* , double* , double );
void compress(ParticleTracer* );
#endif

View File

@@ -74,24 +74,17 @@ void vtkParticle(VtkOptions* o, char* name)
for (int i = 0; i < o->particletracer->totalParticles; ++i)
{
if(particlePool[i].flag == true)
{
double x = particlePool[i].x;
double y = particlePool[i].y;
fprintf(o->fh, "%.2f %.2f 0.0\n", x, y);
}
double x = particlePool[i].x;
double y = particlePool[i].y;
fprintf(o->fh, "%.2f %.2f 0.0\n", x, y);
}
fprintf(o->fh, "CELLS %d %d\n", o->particletracer->totalParticles, 2 * o->particletracer->totalParticles);
for (int i = 0, j = 0; i < o->particletracer->totalParticles; ++i)
for (int i = 0; i < o->particletracer->totalParticles; ++i)
{
if(particlePool[i].flag == true)
{
fprintf(o->fh, "1 %d\n", j);
++j;
}
fprintf(o->fh, "1 %d\n", i);
}
fprintf(o->fh, "CELL_TYPES %d\n", o->particletracer->totalParticles);
@@ -99,10 +92,7 @@ void vtkParticle(VtkOptions* o, char* name)
for (int i = 0; i < o->particletracer->totalParticles; ++i)
{
if(particlePool[i].flag == true)
{
fprintf(o->fh, "1\n");
}
fprintf(o->fh, "1\n");
}
/*

View File

@@ -1,8 +1,8 @@
unset border; unset tics; unset key;
set term gif animate delay 50
set output "trace.gif"
set xrange [0:1]
set yrange [0:1]
set xrange [0:30]
set yrange [0:4]
do for [ts=0:198] {
plot "particles_".ts.".dat" with points pointtype 7
}