Closed iljah closed 8 years ago
Looks like beginning of the file is messed up, opening tag of BLOCKIDS is only partially there:
hexdump -C -n 100 initial-grid.0000000.vlsv
00000000 3c 56 4c 53 56 3e 0a 20 00 00 00 00 00 00 00 00 |<VLSV>. ........|
00000010 49 44 53 20 61 72 72 61 79 73 69 7a 65 3d 22 31 |IDS arraysize="1|
00000020 36 30 22 20 64 61 74 61 73 69 7a 65 3d 22 34 22 |60" datasize="4"|
00000030 20 64 61 74 61 74 79 70 65 3d 22 75 69 6e 74 22 | datatype="uint"|
00000040 20 6d 65 73 68 3d 22 53 70 61 74 69 61 6c 47 72 | mesh="SpatialGr|
00000050 69 64 22 20 6e 61 6d 65 3d 22 61 76 67 73 22 20 |id" name="avgs" |
00000060 76 65 63 74 |vect|
I am pretty sure it's not a matter of project. Check that https://github.com/fmihpc/vlsv/blob/master/vlsv_writer.cpp#L126 https://github.com/fmihpc/vlsv/blob/master/vlsv_writer.cpp#L139 and https://github.com/fmihpc/vlsv/blob/master/vlsv_writer.cpp#L140 do what they should, as https://github.com/fmihpc/vlsv/blob/master/vlsv_writer.cpp#L151 then writes the footer in that position.
This
// myrank == master
if (dryRunning == false) {
MPI_File_seek(fileptr,0,MPI_SEEK_END);
MPI_File_get_position(fileptr,&viewOffset);
MPI_File_get_byte_offset(fileptr,viewOffset,&endOffset);
}
std::cout << "viewOffset: " << viewOffset << ", endOffset: " << endOffset << std::endl;
gives
viewOffset: 43320, endOffset: 0
viewOffset: 37080, endOffset: 0
Well and this is where you should have a value corresponding to your file size as endOffset
.
This test program behaves identically, I'll check if my openmpi installation is messed up:
#include "cstdlib"
#include "iostream"
#include "mpi.h"
int main(int argc, char* argv[]) {
MPI_Init(&argc, &argv);
MPI_File f;
if (MPI_File_open(MPI_COMM_WORLD, "test", MPI_MODE_RDONLY, MPI_INFO_NULL, &f) != MPI_SUCCESS) {
abort();
}
if (MPI_File_seek(f, 0, MPI_SEEK_END) != MPI_SUCCESS) {
abort();
}
MPI_Offset offset1;
if (MPI_File_get_position(f, &offset1) != MPI_SUCCESS) {
abort();
}
std::cout << "offset1: " << offset1 << std::endl;
MPI_Offset offset2;
if (MPI_File_get_byte_offset(f, offset1, &offset2) != MPI_SUCCESS) {
abort();
}
std::cout << "offset2: " << offset2 << std::endl;
MPI_Finalize();
}
Looks like my openmpi installation was broken. I reinstalled better and now vlsv seems to write files correctly.
I ran a small test with vlasiator from this week's git and output files seem to start with xml data contrary to documentation. hexdump shows that binary data seems to start only after xml data, although maybe xml was written in the wrong place? I get:
with this config file:
I started from MultiPeak and changed only names I think.