**please read if you want to be able to read your existing restart files!**

...are now supported.  It is not required to serialize the mesh to write a
restart file from a parallel mesh during an application run.  Similarly, it
is possible to read a restart file onto an EquationSystems object and mesh
which are not serial.

The new format is visually identical to the old one with two important
differences:
(1) there is a version line at the beginning of the file, and
(2) the ordering of the output vectors is different.

If you want to read an old restart file use the --read_legacy_restart_format
command-line option.  Only the new format is written.

The key to doing this was to come up with a partition-agnostic DOF ordering
which could be used to write the same file independent of the partitioning.
I have chosen to use the libHilbert space-filling-curve keys to produce this
ordering.

The approach is as follows:

(1) take the distributed mesh and compute partition-agnostic
DofObject::id()s for the nodes/elements using the Hilbert keys.
(2) 
 for each system
   for each variable in the system
     for a block of nodes
       for each node in the block of nodes
         read/write the solution for this block in hilbert-indexed order
       end
     end
     for a block of elems
       for each elem in the block of elems
         read/write the solution for this block in hilbert-indexed order
       end
     end
   end
 end

The blocking allows a single file to be written through processor 0
independent of the problem size.  Of course, the performance of the write
will scale with the single-node I/O.  (there is an easy parallel option
which could be added.)

The hilbert indexing is what enables the partiton-agnostic IDs, which in
turn enable a file written on N processors to be restarted on M processors.

Now, currently the hilbert indices are temporarily stored in the
DofObject::id() locations.  This requires overwriting the valid numbering
with an invalid numbering and then restoring the original. I thought about
it for a while and chose this approach over adding a DofObject::global_id()
or something like that, although that may be something to consider for the
future.

Thoughts?

-Ben 


-------------------------------------------------------------------------
SF.Net email is sponsored by: The Future of Linux Business White Paper
from Novell.  From the desktop to the data center, Linux is going
mainstream.  Let it simplify your IT future.
http://altfarm.mediaplex.com/ad/ck/8857-50307-18918-4
_______________________________________________
Libmesh-devel mailing list
Libmesh-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libmesh-devel

Reply via email to