Wolfgang, Yes, this happens with the unmodified step-18 example program. I'll take a look at the code and see what I can working.
Thanks, Jon On Wed, Jul 15, 2009 at 3:20 PM, Wolfgang Bangerth<[email protected]> wrote: > > Jonathan, > >> So, on to the issue of mesh partitioning...It actually appears that >> the partitioning is being done correctly, but the writing of >> subdomain_id's is not working well. I have isolated the problem (at >> least I think) to the case when the FilteredDataOut class is used. I >> wrote a small test program that just creates a grid, partitions it, >> and then writes the partitioning to d2 intermediate files. If I loop >> over the cells and write cell->subdomain_id() to the screen, >> everything is fine. Also, GridTools::get_subdomain_association >> returns correct information. >> >> If I write data in serial, that is, using DataOut<dim> on one process, >> then this information is written correctly into the d2 intermediate >> files. If I instead write using FilteredDataOut<dim> using all >> processes, I see incorrect data in the d2 intermediate files. Thus, >> the problem does not appear to be with metis, getting a vector of cell >> subdomain_id's, dataout, or merging the files, but in something when >> FilteredDataOut is used. > > Does this happen with the unmodified step-18? > > I believe I understand what is happening in this case. DataOut loops over all > cells and keeps track of the index of each cell so that it can pick out > elements from cell data vectors (such as the vector of subdomain_ids, as > opposed to node data vectors such as solutions); this works fine as long as > we loop over all cells, but it falls on its face if we only loop over a > subset since the global index of a cell is not the same as its number within > the stream of filtered cells. > > That's a bug; the DataOut class will have to keep a side table of which cell > has which index regardless of the order in which we traverse it. In essence, > what the build_patches function should do is something like this: > > void build_patches () > { > save user indices > index = 0; > for (cell=begin_active; cell!=end; ++cell, ++index) > cell->set_user_index (index); > > do all work as before, but where we used the cell index previously by > counting up an index, now use cell->user_index() instead > > restore user indices > } > > If you want to, feel free to poke around in the code a tad to see if you can > figure out where these changes have to be made. If you can't seem to get > anywhere, let me know and I'll fix this once I'm back from travel the week > after next. > > Best > W. > > ------------------------------------------------------------------------- > Wolfgang Bangerth email: [email protected] > www: http://www.math.tamu.edu/~bangerth/ > > _______________________________________________ dealii mailing list http://poisson.dealii.org/mailman/listinfo/dealii
