WIP: Pull Request for a complete Solver package #2
@@ -42,13 +42,19 @@ $(BUILD_DIR)/%.s:  %.c
 | 
				
			|||||||
clean:
 | 
					clean:
 | 
				
			||||||
	$(info ===>  CLEAN)
 | 
						$(info ===>  CLEAN)
 | 
				
			||||||
	@rm -rf $(BUILD_DIR)
 | 
						@rm -rf $(BUILD_DIR)
 | 
				
			||||||
	@rm -f particle*.dat
 | 
						@rm -f vtk_files/particle*.vtk
 | 
				
			||||||
 | 
						@rm -f vis_files/particle*.dat
 | 
				
			||||||
	@rm -f tags
 | 
						@rm -f tags
 | 
				
			||||||
 | 
					
 | 
				
			||||||
distclean: clean
 | 
					distclean: clean
 | 
				
			||||||
	$(info ===>  DIST CLEAN)
 | 
						$(info ===>  DIST CLEAN)
 | 
				
			||||||
	@rm -f $(TARGET)
 | 
						@rm -f $(TARGET)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					viz:
 | 
				
			||||||
 | 
						$(info ===>  REMOVING VIZUALISATION FILES)	
 | 
				
			||||||
 | 
						@rm -f vtk_files/particle*.vtk
 | 
				
			||||||
 | 
						@rm -f vis_files/particle*.dat
 | 
				
			||||||
 | 
					
 | 
				
			||||||
info:
 | 
					info:
 | 
				
			||||||
	$(info $(CFLAGS))
 | 
						$(info $(CFLAGS))
 | 
				
			||||||
	$(Q)$(CC) $(VERSION)
 | 
						$(Q)$(CC) $(VERSION)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -51,10 +51,10 @@ gamma    0.9		# upwind differencing factor gamma
 | 
				
			|||||||
numberOfParticles   30
 | 
					numberOfParticles   30
 | 
				
			||||||
startTime           0
 | 
					startTime           0
 | 
				
			||||||
injectTimePeriod    2.0
 | 
					injectTimePeriod    2.0
 | 
				
			||||||
writeTimePeriod     2.0
 | 
					writeTimePeriod     0.5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
x1                  0.1
 | 
					x1                  0.1
 | 
				
			||||||
y1                  0.5
 | 
					y1                  0.9
 | 
				
			||||||
x2                  0.9
 | 
					x2                  0.9
 | 
				
			||||||
y2                  0.5
 | 
					y2                  0.9
 | 
				
			||||||
#===============================================================================
 | 
					#===============================================================================
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										0
									
								
								BasicSolver/2D-seq/particlePool
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								BasicSolver/2D-seq/particlePool
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -116,10 +116,34 @@ void writeParticles(ParticleTracer* particletracer, Solver* solver)
 | 
				
			|||||||
    VtkOptions opts = { .solver = solver, .particletracer = particletracer };
 | 
					    VtkOptions opts = { .solver = solver, .particletracer = particletracer };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    char filename[50];
 | 
					    char filename[50];
 | 
				
			||||||
    snprintf(filename, 50, "vtk_files/particles_%d.vtk", ts++);
 | 
					    snprintf(filename, 50, "vtk_files/particles%d.vtk", ts);
 | 
				
			||||||
    vtkOpen(&opts, filename);
 | 
					    vtkOpen(&opts, filename, ts);
 | 
				
			||||||
    vtkParticle(&opts, "particle");
 | 
					    vtkParticle(&opts, "particle");
 | 
				
			||||||
    vtkClose(&opts);
 | 
					    vtkClose(&opts);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    FILE* fp;
 | 
				
			||||||
 | 
					    Particle* particlePool = particletracer->particlePool;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    snprintf(filename, 50, "vis_files/particles_%d.dat", ts);
 | 
				
			||||||
 | 
					    fp = fopen(filename, "w");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (fp == NULL) {
 | 
				
			||||||
 | 
					        printf("Error!\n");
 | 
				
			||||||
 | 
					        exit(EXIT_FAILURE);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    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);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    fclose(fp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ++ts;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void initParticleTracer(ParticleTracer* particletracer, Parameter* params)
 | 
					void initParticleTracer(ParticleTracer* particletracer, Parameter* params)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,112 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * Copyright (C) 2022 NHR@FAU, University Erlangen-Nuremberg.
 | 
					 | 
				
			||||||
 * All rights reserved. This file is part of nusif-solver.
 | 
					 | 
				
			||||||
 * Use of this source code is governed by a MIT style
 | 
					 | 
				
			||||||
 * license that can be found in the LICENSE file.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#include <stdio.h>
 | 
					 | 
				
			||||||
#include <stdlib.h>
 | 
					 | 
				
			||||||
#include <string.h>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "vtkWriter.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static float floatSwap(float f)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    union {
 | 
					 | 
				
			||||||
        float f;
 | 
					 | 
				
			||||||
        char b[4];
 | 
					 | 
				
			||||||
    } dat1, dat2;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    dat1.f    = f;
 | 
					 | 
				
			||||||
    dat2.b[0] = dat1.b[3];
 | 
					 | 
				
			||||||
    dat2.b[1] = dat1.b[2];
 | 
					 | 
				
			||||||
    dat2.b[2] = dat1.b[1];
 | 
					 | 
				
			||||||
    dat2.b[3] = dat1.b[0];
 | 
					 | 
				
			||||||
    return dat2.f;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static void writeHeader(VtkOptions* o)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    fprintf(o->fh, "# vtk DataFile Version 3.0\n");
 | 
					 | 
				
			||||||
    fprintf(o->fh, "PAMPI cfd solver particle tracing file\n");
 | 
					 | 
				
			||||||
    if (o->fmt == ASCII) {
 | 
					 | 
				
			||||||
        fprintf(o->fh, "ASCII\n");
 | 
					 | 
				
			||||||
    } else if (o->fmt == BINARY) {
 | 
					 | 
				
			||||||
        fprintf(o->fh, "BINARY\n");
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    fprintf(o->fh, "DATASET STRUCTURED_POINTS\n");
 | 
					 | 
				
			||||||
    fprintf(o->fh, "DIMENSIONS %d %d 0\n", o->solver->imax, o->solver->jmax);
 | 
					 | 
				
			||||||
    fprintf(o->fh,
 | 
					 | 
				
			||||||
        "ORIGIN %f %f 0.0\n",
 | 
					 | 
				
			||||||
        o->solver->dx * 0.5,
 | 
					 | 
				
			||||||
        o->solver->dy * 0.5);
 | 
					 | 
				
			||||||
    fprintf(o->fh, "SPACING %f %f 0\n", o->solver->dx, o->solver->dy);
 | 
					 | 
				
			||||||
    fprintf(o->fh, "POINT_DATA %d\n", o->particletracer->totalParticles);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void vtkOpen(VtkOptions* o, char* problem)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    o->fh = fopen(problem, "w");
 | 
					 | 
				
			||||||
    writeHeader(o);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    printf("Writing VTK output for %s\n", problem);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void vtkParticle(VtkOptions* o, char* name)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    Particle* particlePool = o->particletracer->particlePool;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    int imax = o->solver->imax;
 | 
					 | 
				
			||||||
    int jmax = o->solver->jmax;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (o->fh == NULL) {
 | 
					 | 
				
			||||||
        printf("vtkWriter not initialize! Call vtkOpen first!\n");
 | 
					 | 
				
			||||||
        exit(EXIT_FAILURE);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    fprintf(o->fh, "VECTORS %s float\n", name);
 | 
					 | 
				
			||||||
    fprintf(o->fh, "LOOKUP_TABLE default\n");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    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, "%f %f 0.0\n", x, y);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /*
 | 
					 | 
				
			||||||
    for (int k = 0; k < kmax; k++) {
 | 
					 | 
				
			||||||
        for (int j = 0; j < jmax; j++) {
 | 
					 | 
				
			||||||
            for (int i = 0; i < imax; i++) {
 | 
					 | 
				
			||||||
                if (o->fmt == ASCII) {
 | 
					 | 
				
			||||||
                    fprintf(o->fh,
 | 
					 | 
				
			||||||
                        "%f %f %f\n",
 | 
					 | 
				
			||||||
                        G(vec.u, i, j, k),
 | 
					 | 
				
			||||||
                        G(vec.v, i, j, k),
 | 
					 | 
				
			||||||
                        G(vec.w, i, j, k));
 | 
					 | 
				
			||||||
                } else if (o->fmt == BINARY) {
 | 
					 | 
				
			||||||
                    fwrite((float[3]) { floatSwap(G(vec.u, i, j, k)),
 | 
					 | 
				
			||||||
                               floatSwap(G(vec.v, i, j, k)),
 | 
					 | 
				
			||||||
                               floatSwap(G(vec.w, i, j, k)) },
 | 
					 | 
				
			||||||
                        sizeof(float),
 | 
					 | 
				
			||||||
                        3,
 | 
					 | 
				
			||||||
                        o->fh);
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    if (o->fmt == BINARY) fprintf(o->fh, "\n");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    */
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void vtkClose(VtkOptions* o)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    fclose(o->fh);
 | 
					 | 
				
			||||||
    o->fh = NULL;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -20,7 +20,7 @@ typedef struct VtkOptions {
 | 
				
			|||||||
    ParticleTracer* particletracer;
 | 
					    ParticleTracer* particletracer;
 | 
				
			||||||
} VtkOptions;
 | 
					} VtkOptions;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern void vtkOpen(VtkOptions* opts, char* filename);
 | 
					extern void vtkOpen(VtkOptions* opts, char* filename, int ts);
 | 
				
			||||||
extern void vtkParticle(VtkOptions* opts, char* name);
 | 
					extern void vtkParticle(VtkOptions* opts, char* name);
 | 
				
			||||||
extern void vtkClose(VtkOptions* opts);
 | 
					extern void vtkClose(VtkOptions* opts);
 | 
				
			||||||
#endif // __VTKWRITER_H_
 | 
					#endif // __VTKWRITER_H_
 | 
				
			||||||
 
 | 
				
			|||||||
										
											Binary file not shown.
										
									
								
							| 
		 Before Width: | Height: | Size: 76 KiB  | 
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -1,9 +1,9 @@
 | 
				
			|||||||
unset border; unset tics; unset key;
 | 
					unset border; unset tics; unset key;
 | 
				
			||||||
set term gif animate delay 50
 | 
					set term gif animate delay 50
 | 
				
			||||||
set output "trace.gif"
 | 
					set output "trace.gif"
 | 
				
			||||||
set xrange [0:30]
 | 
					set xrange [0:1]
 | 
				
			||||||
set yrange [0:4]
 | 
					set yrange [0:1]
 | 
				
			||||||
do for [ts=0:48] {
 | 
					do for [ts=0:198] {
 | 
				
			||||||
    plot "particles_".ts.".dat" with points pointtype 7
 | 
					    plot "particles_".ts.".dat" with points pointtype 7
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
unset output
 | 
					unset output
 | 
				
			||||||
		Reference in New Issue
	
	Block a user