WIP: Pull Request for a complete Solver package #1
| @@ -39,11 +39,9 @@ $(BUILD_DIR)/%.s:  %.c | |||||||
|  |  | ||||||
| .PHONY: clean distclean tags info asm format | .PHONY: clean distclean tags info asm format | ||||||
|  |  | ||||||
| clean: | clean: viz | ||||||
| 	$(info ===>  CLEAN) | 	$(info ===>  CLEAN) | ||||||
| 	@rm -rf $(BUILD_DIR) | 	@rm -rf $(BUILD_DIR) | ||||||
| 	@rm -f vtk_files/particle*.vtk |  | ||||||
| 	@rm -f vis_files/particle*.dat |  | ||||||
| 	@rm -f tags | 	@rm -f tags | ||||||
|  |  | ||||||
| distclean: clean | distclean: clean | ||||||
|   | |||||||
							
								
								
									
										138
									
								
								BasicSolver/2D-seq/src/vtkWriter.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										138
									
								
								BasicSolver/2D-seq/src/vtkWriter.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,138 @@ | |||||||
|  | /* | ||||||
|  |  * 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, int ts) | ||||||
|  | { | ||||||
|  |     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 UNSTRUCTURED_GRID\n"); | ||||||
|  |     fprintf(o->fh, "FIELD FieldData 2\n"); | ||||||
|  |     fprintf(o->fh, "TIME 1 1 double\n"); | ||||||
|  |     fprintf(o->fh, "%d\n", ts); | ||||||
|  |     fprintf(o->fh, "CYCLE 1 1 int\n"); | ||||||
|  |     fprintf(o->fh, "1\n"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void vtkOpen(VtkOptions* o, char* problem, int ts) | ||||||
|  | { | ||||||
|  |     o->fh = fopen(problem, "w"); | ||||||
|  |  | ||||||
|  |     if (o->fh == NULL) { | ||||||
|  |         printf("vtkWriter not initialize! Call vtkOpen first!\n"); | ||||||
|  |         exit(EXIT_FAILURE); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     writeHeader(o, ts); | ||||||
|  |  | ||||||
|  |     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, "POINTS %s float\n", o->particletracer->totalParticles); | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     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); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     fprintf(o->fh, "CELLS %.0f float\n", o->particletracer->totalParticles); | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     for (int i = 0, j = 0; i < o->particletracer->totalParticles; ++i) | ||||||
|  |     { | ||||||
|  |         if(particlePool[i].flag == true) | ||||||
|  |         { | ||||||
|  |             fprintf(o->fh, "1 %d\n", j); | ||||||
|  |             ++j; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     fprintf(o->fh, "CELL_TYPES %.0f\n", o->particletracer->totalParticles); | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     for (int i = 0; i < o->particletracer->totalParticles; ++i) | ||||||
|  |     { | ||||||
|  |         if(particlePool[i].flag == true) | ||||||
|  |         { | ||||||
|  |             fprintf(o->fh, "1\n"); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /* | ||||||
|  |     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; | ||||||
|  | } | ||||||
							
								
								
									
										0
									
								
								BasicSolver/2D-seq/vis_files/particles_1.dat
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								BasicSolver/2D-seq/vis_files/particles_1.dat
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										0
									
								
								BasicSolver/2D-seq/vis_files/particles_2.dat
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								BasicSolver/2D-seq/vis_files/particles_2.dat
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										12
									
								
								BasicSolver/2D-seq/vtk_files/particles0.vtk
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								BasicSolver/2D-seq/vtk_files/particles0.vtk
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | |||||||
|  | # vtk DataFile Version 3.0 | ||||||
|  | PAMPI cfd solver particle tracing file | ||||||
|  | ASCII | ||||||
|  | DATASET UNSTRUCTURED_GRID | ||||||
|  | FIELD FieldData 2 | ||||||
|  | TIME 1 1 double | ||||||
|  | 0 | ||||||
|  | CYCLE 1 1 int | ||||||
|  | 1 | ||||||
|  | POINTS (null) float | ||||||
|  | CELLS 0 float | ||||||
|  | CELL_TYPES 0 | ||||||
							
								
								
									
										12
									
								
								BasicSolver/2D-seq/vtk_files/particles1.vtk
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								BasicSolver/2D-seq/vtk_files/particles1.vtk
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | |||||||
|  | # vtk DataFile Version 3.0 | ||||||
|  | PAMPI cfd solver particle tracing file | ||||||
|  | ASCII | ||||||
|  | DATASET UNSTRUCTURED_GRID | ||||||
|  | FIELD FieldData 2 | ||||||
|  | TIME 1 1 double | ||||||
|  | 1 | ||||||
|  | CYCLE 1 1 int | ||||||
|  | 1 | ||||||
|  | POINTS (null) float | ||||||
|  | CELLS 0 float | ||||||
|  | CELL_TYPES 0 | ||||||
							
								
								
									
										12
									
								
								BasicSolver/2D-seq/vtk_files/particles2.vtk
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								BasicSolver/2D-seq/vtk_files/particles2.vtk
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | |||||||
|  | # vtk DataFile Version 3.0 | ||||||
|  | PAMPI cfd solver particle tracing file | ||||||
|  | ASCII | ||||||
|  | DATASET UNSTRUCTURED_GRID | ||||||
|  | FIELD FieldData 2 | ||||||
|  | TIME 1 1 double | ||||||
|  | 2 | ||||||
|  | CYCLE 1 1 int | ||||||
|  | 1 | ||||||
|  | POINTS (null) float | ||||||
|  | CELLS 0 float | ||||||
|  | CELL_TYPES 0 | ||||||
							
								
								
									
										0
									
								
								BasicSolver/2D-seq/vtk_files/particles3.vtk
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								BasicSolver/2D-seq/vtk_files/particles3.vtk
									
									
									
									
									
										Normal file
									
								
							
		Reference in New Issue
	
	Block a user