Hi,
Yes, you are right. Whenever a program is executed in parallel (or whenever for some other reason the multi-blocks are subdivided into several atomic-blocks), the data is written atomic-block after atomic-block, and there is no global linear ordering of the indices in the file. The reason for this is to enable Palabos to perform parallel Input/Output: every atomic-block is positioned at a given offset in the file and can be written at any time (concurrently) by the processor that holds the data.
You can of course still write a file with, say, 10 processors, and then read the data into a program running on 100 processors. Palabos just needs to know the data layout according to which the file was written. This information is provided in the .plb file.
If all you want to do is write a file, and later on read it again in Palabos, this process is transparent and you don’t need to care about the I/O internals. Now, in your case I understand that you would like to produce the binary input data with another software and read it into Palabos. Well, the simplest way to get this done is to choose a data layout with a single atomic-block. So, run first an example program on one processor (non-parallel), to be sure the data layout has a global linear order, and use the produced .plb file as a template for your own binary input files.
Things are a little bit tougher if your input data is too large to fit into the memory of a single processor (if you have, say, a terabyte of input data). The problem is that if you specify your data to consist of a single atomic-block, Palabos will go ahead and try to read it as a single block into one processor’s memory (before parallelizing it appropriately), and will run out of memory. In this case you must cut it up into smaller slices, or into any other kind of regular blocks, and specify the data layout in the .plb file. Again, let me inisist that this is just to avoid running out of memory during the input stage. This data decomposition has nothing to do with the actual parallelization in the program, because Palabos re-parallelizes the data after having read it.
I strongly suggest that you look at one of these .plb files to see how things work, because it’s really not difficult to understand. The .plb files are simple (XML) text files, and they essentially specify the dimension and position of each atomic-block, and its offset in the binary file. Nothing unexpected is going on here, at least for scalar- and tensor-fields. With block-lattices some kind of higher-order magic occurs, as the content of the dynamics objects is being serialized into the data files. Therefore, if you write your own binary input files, restrict yourself to scalar- and tensor-fields. If you want to read the populations of a lattice, read them into a tensor-field and then copy them into the lattice.
Good luck,
Jonas