forked from moebiusband/NuSiF-Solver
Fix VTK MPI-IO Writer
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
# Supported: GCC, CLANG, ICC
|
||||
TAG ?= ICC
|
||||
TAG ?= CLANG
|
||||
ENABLE_OPENMP ?= false
|
||||
|
||||
#Feature options
|
||||
|
@@ -11,18 +11,22 @@
|
||||
#include "vtkWriter.h"
|
||||
#define G(v, i, j, k) v[(k)*imax * jmax + (j)*imax + (i)]
|
||||
|
||||
static float floatSwap(float f)
|
||||
static double floatSwap(double f)
|
||||
{
|
||||
union {
|
||||
float f;
|
||||
char b[4];
|
||||
double f;
|
||||
char b[8];
|
||||
} 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];
|
||||
dat2.b[0] = dat1.b[7];
|
||||
dat2.b[1] = dat1.b[6];
|
||||
dat2.b[2] = dat1.b[5];
|
||||
dat2.b[3] = dat1.b[4];
|
||||
dat2.b[4] = dat1.b[3];
|
||||
dat2.b[5] = dat1.b[2];
|
||||
dat2.b[6] = dat1.b[1];
|
||||
dat2.b[7] = dat1.b[0];
|
||||
return dat2.f;
|
||||
}
|
||||
|
||||
@@ -75,8 +79,8 @@ static void writeScalar(VtkOptions* o, double* s)
|
||||
if (o->fmt == ASCII) {
|
||||
fprintf(o->fh, "%f\n", G(s, i, j, k));
|
||||
} else if (o->fmt == BINARY) {
|
||||
fwrite((float[1]) { floatSwap(G(s, i, j, k)) },
|
||||
sizeof(float),
|
||||
fwrite((double[1]) { floatSwap(G(s, i, j, k)) },
|
||||
sizeof(double),
|
||||
1,
|
||||
o->fh);
|
||||
}
|
||||
@@ -102,7 +106,7 @@ void vtkScalar(VtkOptions* o, char* name, double* s)
|
||||
if (o->mode == UNIX) {
|
||||
if (commIsMaster(&o->comm)) {
|
||||
if (!isInitialized(o->fh)) return;
|
||||
fprintf(o->fh, "SCALARS %s float 1\n", name);
|
||||
fprintf(o->fh, "SCALARS %s double 1\n", name);
|
||||
fprintf(o->fh, "LOOKUP_TABLE default\n");
|
||||
writeScalar(o, s);
|
||||
}
|
||||
@@ -126,10 +130,10 @@ static void writeVector(VtkOptions* o, VtkVector vec)
|
||||
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)),
|
||||
fwrite((double[3]) { floatSwap(G(vec.u, i, j, k)),
|
||||
floatSwap(G(vec.v, i, j, k)),
|
||||
floatSwap(G(vec.w, i, j, k)) },
|
||||
sizeof(float),
|
||||
sizeof(double),
|
||||
3,
|
||||
o->fh);
|
||||
}
|
||||
@@ -146,7 +150,7 @@ void vtkVector(VtkOptions* o, char* name, VtkVector vec)
|
||||
if (o->mode == UNIX) {
|
||||
if (commIsMaster(&o->comm)) {
|
||||
if (!isInitialized(o->fh)) return;
|
||||
fprintf(o->fh, "VECTORS %s float\n", name);
|
||||
fprintf(o->fh, "VECTORS %s double\n", name);
|
||||
writeVector(o, vec);
|
||||
}
|
||||
} else if (o->mode == MPI) {
|
||||
|
Reference in New Issue
Block a user