how to deal efficiently with the CSR Format for multiple partitions?


I am puzzled how to deal with the distributed CSR format in cases of dynamic repartitioning. According to the ParMetis documentation the distributed CSR format requires that:

"... each Processor P_i stores n_i consecutive vertices of the graph ..."

For the first partitioning this is no problem: each processor reads his part of the input mesh/graph from a file such that each processor stores consequtive nodes. I call ParMetis and I have a distributed list of the partitioning result.
Now I start the redistribution of the nodes with all the data connected to that node according to the result from ParMetis. If this is done a processor does no longer exhibit a consequtive list of nodes. So how can I redistribute again?
Two possibilities come to my mind that is either
to redistribute the nodes before calling ParMetis again (this is quite unreasonable) or
to renumber the whole mesh (actually this also seems quite unreasonable).

So is there a good approach to dealing with that issue?

Thank you, Christian

RE: The second approach (i.e.,

The second approach (i.e., renumbering of the whole mesh) is the approach that is essentially advocated by parmetis. It is not as unreasonable as you think, as it allows for some good optimizations in the subsequent computation / communication steps.