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