Write data to disk using any of the available formats.
42 char filename[512], sline[512];
43 static int last_computed_var = -1;
57 print1 (
"> Writing file #%d (%s) to disk...", output->
nfile, output->
ext);
60 MPI_Barrier (MPI_COMM_WORLD);
61 if (
prank == 0) time(&tbeg);
101 single_file = strcmp(output->
mode,
"single_file") == 0;
102 dsize =
sizeof(double);
106 sprintf (filename,
"%s/data.%04d.%s", output->
dir,output->
nfile,
112 for (nv = 0; nv < output->
nvar; nv++) {
113 if (!output->
dump_var[nv])
continue;
117 Vpt = (
void *)output->
V[nv][0][0];
118 }
else if (output->
stag_var[nv] == 0) {
120 Vpt = (
void *)(output->
V[nv][0][0]-1);
121 }
else if (output->
stag_var[nv] == 1) {
123 Vpt = (
void *)output->
V[nv][0][-1];
124 }
else if (output->
stag_var[nv] == 2) {
126 Vpt = (
void *)output->
V[nv][-1][0];
144 for (nv = 0; nv < output->
nvar; nv++) {
145 if (!output->
dump_var[nv])
continue;
146 sprintf (filename,
"%s/%s.%04d.%s", output->
dir, output->
var_name[nv],
151 Vpt = (
void *)output->
V[nv][0][0];
152 }
else if (output->
stag_var[nv] == 0) {
154 Vpt = (
void *)(output->
V[nv][0][0]-1);
155 }
else if (output->
stag_var[nv] == 1) {
157 Vpt = (
void *)output->
V[nv][0][-1];
158 }
else if (output->
stag_var[nv] == 2) {
160 Vpt = (
void *)output->
V[nv][-1][0];
174 single_file = strcmp(output->
mode,
"single_file") == 0;
177 sprintf (filename,
"%s/data.%04d.%s", output->
dir, output->
nfile,
180 for (nv = 0; nv < output->
nvar; nv++) {
181 if (!output->
dump_var[nv])
continue;
184 Vpt = (
void *)Vpt3[0][0];
194 for (nv = 0; nv < output->
nvar; nv++) {
195 if (!output->
dump_var[nv])
continue;
196 sprintf (filename,
"%s/%s.%04d.%s", output->
dir, output->
var_name[nv],
202 Vpt = (
void *)Vpt3[0][0];
219 print1 (
"! WriteData: HDF5 library not available\n");
233 single_file = strcmp(output->
mode,
"single_file") == 0;
234 sprintf (filename,
"%s/data.%04d.%s", output->
dir, output->
nfile,
241 for (nv = 0; nv < output->
nvar; nv++) {
254 for (nv = 0; nv < output->
nvar; nv++) {
263 for (nv = 0; nv < output->
nvar; nv++) {
265 if (strcmp(output->
var_name[nv],
"vx1") == 0) {
266 sprintf (filename,
"%s/vfield.%04d.%s", output->
dir, output->
nfile,
268 }
else if (strcmp(output->
var_name[nv],
"bx1") == 0) {
269 sprintf (filename,
"%s/bfield.%04d.%s", output->
dir, output->
nfile,
272 print1 (
"! WriteData: unknown vector type in VTK output\n");
283 for (nv = 0; nv < output->
nvar; nv++) {
285 sprintf (filename,
"%s/%s.%04d.%s", output->
dir, output->
var_name[nv],
308 sprintf (filename,
"%s/data.%04d.%s", output->
dir, output->
nfile,
319 for (nv = 0; nv < output->
nvar; nv++) {
320 if (!output->
dump_var[nv])
continue;
321 sprintf (filename,
"%s/%s.%04d.%s", output->
dir, output->
var_name[nv],
334 for (nv = 0; nv < output->
nvar; nv++) {
335 if (!output->
dump_var[nv])
continue;
336 sprintf (filename,
"%s/%s.%04d.%s", output->
dir, output->
var_name[nv],
341 print1 (
"! PNG library not available\n");
351 sprintf (filename,
"%s/%s.out",output->
dir, output->
ext);
354 if (output->
nfile == 0) {
355 fout = fopen (filename,
"w");
357 fout = fopen (filename,
"r+");
358 for (nv = 0; nv < output->
nfile; nv++) fgets (sline, 512, fout);
359 fseek (fout, ftell(fout), SEEK_SET);
364 fprintf (fout,
"%d %12.6e %12.6e %ld ",
367 if (single_file) fprintf (fout,
"single_file ");
368 else fprintf (fout,
"multiple_files ");
371 else fprintf (fout,
"big ");
373 for (nv = 0; nv < output->
nvar; nv++) {
382 MPI_Barrier (MPI_COMM_WORLD);
385 print1 (
" [%5.2f sec]",difftime(tend,tbeg));
void WritePNG(double ***, char *, char *, Grid *)
double *** V[64]
pointer to arrays being written - same for all
long long AL_Get_offset(int sz_ptr)
void print1(const char *fmt,...)
FILE * OpenBinaryFile(char *filename, int sz, char *mode)
int nfile
current number being saved - one per output
void GetCGSUnits(double *u)
double g_dt
The current integration time step.
int AL_Set_offset(int sz_ptr, long long offset)
void WriteVTK_Scalar(FILE *, double ***, double, char *, Grid *)
void WriteHDF5(Output *output, Grid *grid)
char dir[256]
output directory name
void WriteVTK_Vector(FILE *, Data_Arr, double, char *, Grid *)
void WriteVTK_Header(FILE *, Grid *)
float *** Convert_dbl2flt(double ***Vdbl, double unit, int swap_endian)
int cgs
when set to 1 saves data in c.g.s units
char ext[8]
output extension
void ComputeUserVar(const Data *, Grid *)
long int g_stepNumber
Gives the current integration step number.
void WritePPM(double ***, char *, char *, Grid *)
int * dump_var
select vars being written - one per output
double g_time
The current integration time.
char mode[32]
single or multiple files - one per output
int type
output format (DBL, FLT, ...) - one per output
int * stag_var
centered or staggered variable - same for all
void WriteTabArray(Output *, char *, Grid *)
double **** Vuser
Array storing user-defined supplementary variables written to disk.
int CloseBinaryFile(FILE *fbin, int sz)
#define QUIT_PLUTO(e_code)
void WriteBinaryArray(void *V, size_t dsize, int sz, FILE *fl, int istag)
char ** var_name
variable names - same for all