Optimized particlePool handling
This commit is contained in:
@@ -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));
|
||||
}
|
@@ -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
|
@@ -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");
|
||||
}
|
||||
|
||||
/*
|
||||
|
@@ -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
|
||||
}
|
||||
|
Reference in New Issue
Block a user